Sha256: 0971bd1d96f890f2165a943635632ad06a2b181cb947cbae0399576d7e9ed35b

Contents?: true

Size: 1.62 KB

Versions: 5

Compression:

Stored size: 1.62 KB

Contents

import React, { useState } from "react";

import AddTagForm from "./TagEditor/AddTagForm";
import Tag from "./TagEditor/Tag";

interface TagEditorProps {
  name: string;
  enabled: string[];
  tags: string[];
}

function onlyUnique(value: string, index: number, self: string[]): number {
  return self.indexOf(value) === index;
}

export default function TagEditor(props: TagEditorProps) {
  const [tags, setTags] = useState(props.tags);
  const [enabled, setEnabled] = useState(props.enabled);

  const tagList = [...tags, ...enabled].filter(onlyUnique);

  const normalize = (tag: string): string => {
    return (
      tagList.filter((t) => t.toLowerCase() == tag.toLowerCase())[0] || tag
    );
  };

  const tagEnabled = (tag: string): boolean => {
    return (
      enabled.map((t) => t.toLowerCase()).indexOf(tag.toLowerCase()) !== -1
    );
  };

  const toggleEnabled = (tag: string) => {
    const normalized = normalize(tag);

    if (tagEnabled(normalized)) {
      setEnabled(enabled.filter((t) => t !== normalized));
    } else {
      setEnabled([...enabled, normalized]);
    }
  };

  const addTag = (tag: string) => {
    const normalized = normalize(tag);

    setTags([...tags, normalized].filter(onlyUnique));
    setEnabled([...enabled, normalized].filter(onlyUnique));
  };

  return (
    <div className="tag-editor clearfix">
      <input type="hidden" name={props.name} value={JSON.stringify(enabled)} />
      {tagList.map((t) => (
        <Tag
          key={t}
          tag={t}
          enabled={tagEnabled(t)}
          toggleEnabled={toggleEnabled}
        />
      ))}
      <AddTagForm addTag={addTag} />
    </div>
  );
}

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
pages_core-3.14.0 app/javascript/components/TagEditor.tsx
pages_core-3.13.0 app/javascript/components/TagEditor.tsx
pages_core-3.12.7 app/javascript/components/TagEditor.tsx
pages_core-3.12.6 app/javascript/components/TagEditor.tsx
pages_core-3.12.5 app/javascript/components/TagEditor.tsx