UNPKG

@boxyhq/react-ui

Version:

React UI components from BoxyHQ

1 lines 9.44 kB
{"version":3,"file":"index-CkmUXhUX.cjs","sources":["../src/shared/icons/XMarkIcon.tsx","../src/shared/inputs/ItemList/ItemRow.tsx","../src/shared/inputs/ItemList/index.tsx"],"sourcesContent":["import * as React from \"react\";\n\nexport interface XMarkIconProps {\n svgAttrs?: SVGProps;\n}\n\nimport { SVGProps } from \"../types\";\n\nfunction XMarkIcon(props: XMarkIconProps) {\n return (\n <svg\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n {...props.svgAttrs}\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M6 18 18 6M6 6l12 12\"\n />\n </svg>\n );\n}\n\nexport default XMarkIcon;\n","\"use client\";\nimport * as React from \"react\";\n\ntype ItemRowProps = {\n inputType: \"text\" | \"url\" | \"number\" | \"password\";\n item: string;\n index: number;\n handleItemUpdate: (newItem: string, index: number) => void;\n handleItemDelete: (index: number) => void;\n handleBlur: (index: number) => void;\n isDuplicateItem?: boolean;\n disableDelete?: boolean;\n disabled?: boolean;\n classNames: {\n input: string;\n };\n};\nimport XMarkIcon from \"../../icons/XMarkIcon\";\nimport styles from \"../index.module.css\";\nimport itemStyles from \"./index.module.css\";\n\nfunction ItemRow(props: ItemRowProps) {\n return (\n <div className={itemStyles.row}>\n <input\n name=\"item\"\n type={props.inputType || \"text\"}\n className={`${props.classNames.input} ${styles[\"input-sm\"]} ${itemStyles[\"input\"]}`}\n value={props.item}\n onChange={(event) =>\n props.handleItemUpdate(event.target.value, props.index)\n }\n onBlur={(event) => props.handleBlur(props.index)}\n required\n disabled={props.disabled}\n />\n <button\n type=\"button\"\n onClick={(event) => props.handleItemDelete(props.index)}\n disabled={props.disableDelete}\n >\n <XMarkIcon\n svgAttrs={{\n class: itemStyles[\"svg\"],\n }}\n />\n </button>\n </div>\n );\n}\n\nexport default ItemRow;\n","\"use client\";\nimport * as React from \"react\";\nimport { useState } from \"react\";\n\ntype ItemListProps = {\n label: string;\n inputType: \"text\" | \"url\" | \"number\" | \"password\";\n classNames?: {\n label?: string;\n input?: string;\n };\n currentlist: string | string[];\n fieldName: string;\n handleItemListUpdate: (fieldName: string, newList: string[]) => void;\n};\nimport ItemRow from \"./ItemRow\";\nimport styles from \"../index.module.css\";\nimport listStyles from \"./index.module.css\";\nimport cssClassAssembler from \"../../../sso/utils/cssClassAssembler\";\nimport Button from \"../../Button/index\";\nimport ExclamationTriangle from \"../../icons/ExclamationTriangle\";\n\nfunction ItemList(props: ItemListProps) {\n const [duplicateEntryIndex, setDuplicateEntryIndex] = useState(\n () => undefined\n );\n\n function list() {\n return Array.isArray(props.currentlist)\n ? props.currentlist\n : [props.currentlist];\n }\n\n function addAnother() {\n props.handleItemListUpdate(props.fieldName, [...list(), \"\"]);\n }\n\n function handleItemUpdate(newItem: string, index: number) {\n const newList = [...list()];\n newList[index] = newItem;\n props.handleItemListUpdate(props.fieldName, newList);\n }\n\n function checkDuplicates(index: number) {\n const _item = list()[index];\n // search backwards\n const _firstIndex = list().indexOf(_item);\n if (_firstIndex !== index) {\n setDuplicateEntryIndex(index);\n return;\n } else if (duplicateEntryIndex === index) {\n setDuplicateEntryIndex(undefined);\n }\n // search forwards\n const _nextIndex = list()\n .slice(index + 1)\n .indexOf(_item);\n if (_nextIndex !== -1) {\n setDuplicateEntryIndex(index);\n } else if (duplicateEntryIndex === index) {\n setDuplicateEntryIndex(undefined);\n }\n }\n\n function handleItemDelete(index: number) {\n const _itemToDelete = list()[index];\n if (\n duplicateEntryIndex !== undefined &&\n (duplicateEntryIndex === index ||\n _itemToDelete === list()[duplicateEntryIndex])\n ) {\n setDuplicateEntryIndex(undefined);\n }\n props.handleItemListUpdate(\n props.fieldName,\n list().filter((_, i) => i !== index)\n );\n }\n\n function cssClass() {\n return {\n label: cssClassAssembler(props.classNames?.label, styles.label),\n input: cssClassAssembler(props.classNames?.input, styles.input),\n };\n }\n\n return (\n <fieldset className={styles.fieldset}>\n <legend className={cssClass().label}>{props.label}</legend>\n <div className={listStyles.rowContainer}>\n {list()?.map((item, index) => (\n <div key={index}>\n <ItemRow\n inputType={props.inputType}\n item={item}\n index={index}\n isDuplicateItem={duplicateEntryIndex === index}\n handleItemUpdate={handleItemUpdate}\n handleItemDelete={handleItemDelete}\n disableDelete={index === 0 && list().length === 1}\n handleBlur={checkDuplicates}\n disabled={\n duplicateEntryIndex !== undefined &&\n duplicateEntryIndex !== index\n }\n classNames={{\n input: cssClass().input,\n }}\n />\n {duplicateEntryIndex === index ? (\n <span className={listStyles.error}>\n <ExclamationTriangle\n svgAttrs={{\n class: listStyles[\"svg\"],\n \"aria-hidden\": true,\n }}\n />\n Duplicate entries not allowed.\n </span>\n ) : null}\n </div>\n ))}\n <div>\n <Button\n type=\"button\"\n variant=\"outline\"\n name=\"Add URL\"\n classNames={listStyles[\"add\"]}\n onClick={(event) => addAnother()}\n disabled={duplicateEntryIndex !== undefined}\n />\n </div>\n </div>\n </fieldset>\n );\n}\n\nexport default ItemList;\n"],"names":["XMarkIcon","props","jsx","ItemRow","jsxs","itemStyles","styles","event","ItemList","duplicateEntryIndex","setDuplicateEntryIndex","useState","list","addAnother","handleItemUpdate","newItem","index","newList","checkDuplicates","_item","handleItemDelete","_itemToDelete","_","i","cssClass","cssClassAssembler","_a","_b","listStyles","item","ExclamationTriangle","Button"],"mappings":"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"}