Sha256: 59c55dc73da2f05a32b124706b107fb267f3b0837e25ed0e9080473791e45269
Contents?: true
Size: 1.58 KB
Versions: 3
Compression:
Stored size: 1.58 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
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
pages_core-3.12.4 | app/javascript/components/TagEditor.tsx |
pages_core-3.12.3 | app/javascript/components/TagEditor.tsx |
pages_core-3.12.2 | app/javascript/components/TagEditor.tsx |