@box/metadata-template-editor 2.3.25 → 2.3.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/metadata-field-list.js +1 -1
- package/dist/chunks/metadata-template-editor-modal.js +1 -1
- package/dist/chunks/metadata-template-editor.js +1 -1
- package/dist/chunks/taxonomy-field-configuration.js +1 -1
- package/dist/chunks/types.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/components/metadata-field-configurator/components/field-edit-content/field-edit-content.js +1 -1
- package/dist/esm/lib/components/metadata-field-configurator/components/type-specific-configuration/dropdown/__mocks__/getInitialValues.js +1 -1
- package/dist/esm/lib/components/metadata-field-configurator/components/type-specific-configuration/taxonomy/taxonomy-default-values.js +1 -1
- package/dist/esm/lib/components/metadata-field-configurator/hooks/useTemplateFieldSchema.js +1 -1
- package/dist/esm/lib/components/metadata-field-configurator/messages/configurator-messages.js +1 -1
- package/dist/esm/lib/components/metadata-field-configurator/metadata-field-configurator.js +1 -1
- package/dist/esm/lib/components/metadata-field-configurator/utils.js +1 -1
- package/dist/esm/lib/utils/field-options/field-type-icon.js +1 -1
- package/dist/esm/lib/utils/field-options/useFieldOptions.js +1 -1
- package/dist/esm/lib/utils/template-type-conversion/convertLocalConfiguratorToTemplateField.js +1 -1
- package/dist/esm/lib/utils/template-type-conversion/convertTemplateFieldToLocalConfigurator.js +1 -1
- package/dist/esm/lib/utils/template-type-conversion/generateJSONPatchTemplateOperations.js +1 -1
- package/dist/types/lib/components/metadata-field-configurator/hooks/useTemplateFieldSchema.d.ts +1 -0
- package/dist/types/lib/components/metadata-field-configurator/messages/configurator-messages.d.ts +10 -0
- package/dist/types/lib/hooks/useMetadataTemplateFormSchema.d.ts +1 -0
- package/dist/types/lib/types.d.ts +37 -3
- package/dist/types/lib/utils/field-options/useFieldOptions.d.ts +2 -2
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as FieldType}from"./types.js";import{FieldTypeIcon}from"../esm/lib/utils/field-options/field-type-icon.js";import{EditorConfigContext,useEditorConfig}from"../esm/lib/components/metadata-field-configurator/context/editor-config-context.js";import{general}from"../esm/lib/components/metadata-field-configurator/messages/configurator-messages.js";import{useTemplateFieldSchema}from"../esm/lib/components/metadata-field-configurator/hooks/useTemplateFieldSchema.js";import{TaxonomyOptionsContext}from"../esm/lib/components/metadata-field-configurator/context/taxonomy-options-context.js";import{FieldExtensionsContext}from"../esm/lib/components/metadata-field-configurator/context/field-extensions-context.js";import{useTaxonomyFetch}from"../esm/lib/components/metadata-field-configurator/hooks/useTaxonomyFetch.js";import{MetadataFieldConfigurator}from"../esm/lib/components/metadata-field-configurator/metadata-field-configurator.js";import{Accordion}from"@box/blueprint-web";import{useIntl}from"react-intl";import{jsx,jsxs}from"react/jsx-runtime";import{forwardRef,useCallback,useEffect,useImperativeHandle,useMemo,useRef,useState}from"react";import*as Yup from"yup";import clsx from"clsx";import cloneDeep from"lodash/cloneDeep";import uniqueId from"lodash/uniqueId";import{DndContext,DragOverlay,KeyboardSensor,PointerSensor,TouchSensor,closestCenter,useSensor,useSensors}from"@dnd-kit/core";import{SortableContext,arrayMove,sortableKeyboardCoordinates,useSortable,verticalListSortingStrategy}from"@dnd-kit/sortable";import{CSS}from"@dnd-kit/utilities";import '../styles/metadata-field-list.css';var metadata_field_list_module_default={fieldList:`_fieldList_18x5c_1`,fieldItem:`_fieldItem_18x5c_11`,dragging:`_dragging_18x5c_11`,accordionRootContainer:`_accordionRootContainer_18x5c_15`},FIELDS_AGGREGATE_VALIDATION_DEBOUNCE_MS=150;function getFieldId(field){return field.id}var ACCORDION_ANIMATION_MS=150,FieldListKeyboardSensor=class extends KeyboardSensor{static activators=[{eventName:`onKeyDown`,handler:(event,options,context)=>{let target=event.nativeEvent?.target??event.target??null;return target instanceof HTMLElement&&[`BUTTON`,`INPUT`,`SELECT`,`TEXTAREA`,`A`].includes(target.tagName)?!1:KeyboardSensor.activators[0].handler(event,options,context)}}]};function SortableFieldItem({field,index,maxIndex,isExpanded,onChangeField,onDeleteAtIndex,onDuplicateAtIndex,onReorderFields,onRequestExpand,submitAttemptCount}){let id=getFieldId(field),{attributes,listeners,setNodeRef,transform,transition,isDragging}=useSortable({id});return jsx(`li`,{ref:setNodeRef,style:{transform:CSS.Translate.toString(transform),transition},"data-field-id":id,className:clsx(metadata_field_list_module_default.fieldItem,{[metadata_field_list_module_default.dragging]:isDragging}),children:jsx(MetadataFieldConfigurator,{values:field,onValuesChange:onChangeField,index,maxIndex,onDelete:()=>onDeleteAtIndex(index),onDuplicate:()=>onDuplicateAtIndex(index),onReorderFields,dndDragHandleProps:{listeners,attributes},isExpanded,onExpandedChange:expanded=>{expanded&&onRequestExpand()},submitAttemptCount})})}var MetadataFieldList=forwardRef(function({fields,onChangeFields,onDeleteFieldAtIndex,onDuplicateField,taxonomyOptions,fetchTaxonomies,disabledFieldTypes,taxonomyInitialStateLabels,firstInvalidFieldIndex,submitAttemptCount,fieldExtensions,onValidationChange,readOnly=!1},ref){let{formatMessage}=useIntl(),parentEditorConfig=useEditorConfig(),taxonomyContextValue=useTaxonomyFetch(fetchTaxonomies,taxonomyOptions),fieldListRef=useRef(null),pendingScrollFieldIdRef=useRef(null),seenFieldIdsRef=useRef(new Set(fields.map(field=>getFieldId(field)))),fieldSchema=useTemplateFieldSchema(),lastEmittedAggregateValidRef=useRef(null);useEffect(()=>{lastEmittedAggregateValidRef.current=null},[onValidationChange]),useEffect(()=>{if(!onValidationChange)return;let cancelled=!1,timeoutId=setTimeout(()=>{Yup.array().of(fieldSchema).validate(fields,{abortEarly:!0}).then(()=>{cancelled||lastEmittedAggregateValidRef.current===!0||(lastEmittedAggregateValidRef.current=!0,onValidationChange(!0))}).catch(()=>{cancelled||lastEmittedAggregateValidRef.current===!1||(lastEmittedAggregateValidRef.current=!1,onValidationChange(!1))})},FIELDS_AGGREGATE_VALIDATION_DEBOUNCE_MS);return()=>{cancelled=!0,clearTimeout(timeoutId)}},[fields,fieldSchema,onValidationChange]);let[expandedFieldKey,setExpandedFieldKey]=useState(()=>{let firstNewField=fields.find(f=>f.isFieldNew);return firstNewField?getFieldId(firstNewField):null});useImperativeHandle(ref,()=>({scrollToAndExpand(fieldId){pendingScrollFieldIdRef.current=fieldId,expandedFieldKey===fieldId?(pendingScrollFieldIdRef.current=null,setTimeout(()=>{(fieldListRef.current?.querySelector(`[data-field-id="${fieldId}"]`))?.scrollIntoView({behavior:`smooth`,block:`nearest`})},0)):setExpandedFieldKey(fieldId)}}),[expandedFieldKey]),useEffect(()=>{fields.forEach(field=>{let id=getFieldId(field);seenFieldIdsRef.current.has(id)||(seenFieldIdsRef.current.add(id),pendingScrollFieldIdRef.current=id,setExpandedFieldKey(id))})},[fields]),useEffect(()=>{if(firstInvalidFieldIndex==null||!submitAttemptCount)return;let field=fields[firstInvalidFieldIndex];if(!field)return;let fieldId=getFieldId(field);setExpandedFieldKey(fieldId),requestAnimationFrame(()=>{(fieldListRef.current?.querySelector(`[data-field-id="${fieldId}"]`))?.scrollIntoView({behavior:`smooth`,block:`nearest`})})},[submitAttemptCount]),useEffect(()=>{let fieldId=pendingScrollFieldIdRef.current;if(!fieldId||fieldId!==expandedFieldKey)return;pendingScrollFieldIdRef.current=null;let timer=setTimeout(()=>{(fieldListRef.current?.querySelector(`[data-field-id="${fieldId}"]`))?.scrollIntoView({behavior:`smooth`,block:`nearest`})},ACCORDION_ANIMATION_MS);return()=>clearTimeout(timer)},[expandedFieldKey]);let[activeFieldId,setActiveFieldId]=useState(null),sensors=useSensors(useSensor(PointerSensor,{activationConstraint:{distance:8}}),useSensor(TouchSensor,{activationConstraint:{delay:250,tolerance:5}}),useSensor(FieldListKeyboardSensor,{coordinateGetter:sortableKeyboardCoordinates})),handleDragStart=useCallback(event=>{setActiveFieldId(String(event.active.id))},[]),handleDragEnd=useCallback(event=>{setActiveFieldId(null);let{active,over}=event;if(over&&active.id!==over.id){let oldIndex=fields.findIndex(f=>getFieldId(f)===active.id),newIndex=fields.findIndex(f=>getFieldId(f)===over.id);oldIndex!==-1&&newIndex!==-1&&onChangeFields?.(arrayMove(fields,oldIndex,newIndex))}},[fields,onChangeFields]),handleDragCancel=useCallback(()=>{setActiveFieldId(null)},[]),handleFieldChange=useCallback((index,field)=>{onChangeFields?.(fields.map((f,i)=>i===index?field:f))},[fields,onChangeFields]),handleDeleteAtIndex=useCallback(index=>{let fieldToDelete=fields[index],fieldId=getFieldId(fieldToDelete);setExpandedFieldKey(prev=>prev===fieldId?null:prev),onChangeFields?.(fields.filter((_,i)=>i!==index)),onDeleteFieldAtIndex?.(index,fieldToDelete)},[fields,onChangeFields,onDeleteFieldAtIndex]),handleDuplicateAtIndex=useCallback(index=>{let fieldToDuplicate=fields[index],duplicated=cloneDeep(fieldToDuplicate);duplicated.id=uniqueId(`field-`),duplicated.key=``,duplicated.isFieldNew=!0,duplicated.type===FieldType.Dropdown&&(duplicated.dropdown.options=duplicated.dropdown.options.map(opt=>({...opt,id:uniqueId()})));let newFields=[...fields];newFields.splice(index+1,0,duplicated),onChangeFields?.(newFields),onDuplicateField?.(duplicated)},[fields,onChangeFields,onDuplicateField]),handleReorderFields=useCallback((fromIndex,toIndex)=>{toIndex<0||toIndex>=fields.length||onChangeFields?.(arrayMove(fields,fromIndex,toIndex))},[fields,onChangeFields]),handleAccordionValueChange=useCallback(value=>{let newKey=value||null;setExpandedFieldKey(newKey),newKey&&setTimeout(()=>{(fieldListRef.current?.querySelector(`[data-field-id="${newKey}"]`))?.scrollIntoView({behavior:`smooth`,block:`nearest`})},ACCORDION_ANIMATION_MS)},[]),items=fields.map(f=>getFieldId(f)),activeField=activeFieldId?fields.find(f=>getFieldId(f)===activeFieldId):null,OverlayTitleIcon=activeField?FieldTypeIcon(activeField.type):null,overlayTitle=activeField?(field=>{let name=field.name||formatMessage(general.fieldNameInputPlaceholder);return field.type===FieldType.Dropdown?`${name} (${field.dropdown?.options?.length??0})`:name})(activeField):``,editorConfigValue=useMemo(()=>({disabledFieldTypes:disabledFieldTypes??parentEditorConfig.disabledFieldTypes,taxonomyInitialStateLabels:taxonomyInitialStateLabels??parentEditorConfig.taxonomyInitialStateLabels}),[disabledFieldTypes,taxonomyInitialStateLabels,parentEditorConfig]),listItems=readOnly?jsx(`ul`,{ref:fieldListRef,className:metadata_field_list_module_default.fieldList,children:fields.map((field,index)=>{let fieldId=getFieldId(field);return jsx(`li`,{"data-field-id":fieldId,className:metadata_field_list_module_default.fieldItem,children:jsx(MetadataFieldConfigurator,{values:field,onValuesChange:()=>void 0,index,maxIndex:fields.length-1,onDuplicate:()=>void 0,onReorderFields:()=>void 0,onDragStart:()=>void 0,onDragEnd:()=>void 0,onTouchStart:()=>void 0,isExpanded:expandedFieldKey===fieldId,onExpandedChange:expanded=>{expanded&&setExpandedFieldKey(fieldId)},readOnly:!0})},fieldId)})}):jsx(SortableContext,{items,strategy:verticalListSortingStrategy,children:jsx(`ul`,{ref:fieldListRef,className:metadata_field_list_module_default.fieldList,children:fields.map((field,index)=>{let fieldId=getFieldId(field);return jsx(SortableFieldItem,{field,index,maxIndex:fields.length-1,isExpanded:expandedFieldKey===fieldId,onChangeField:updatedField=>handleFieldChange(index,updatedField),onDeleteAtIndex:handleDeleteAtIndex,onDuplicateAtIndex:handleDuplicateAtIndex,onReorderFields:handleReorderFields,onRequestExpand:()=>setExpandedFieldKey(fieldId),submitAttemptCount},fieldId)})})}),accordionContainer=jsx(`div`,{className:metadata_field_list_module_default.accordionRootContainer,children:jsx(Accordion,{type:`single`,collapsible:!0,value:expandedFieldKey??``,onValueChange:handleAccordionValueChange,children:listItems})}),coreContent=readOnly?accordionContainer:jsxs(DndContext,{sensors,collisionDetection:closestCenter,onDragStart:handleDragStart,onDragEnd:handleDragEnd,onDragCancel:handleDragCancel,children:[accordionContainer,jsx(DragOverlay,{dropAnimation:null,children:activeField&&OverlayTitleIcon?jsx(Accordion,{type:`single`,children:jsx(Accordion.Item,{value:`ghost`,title:overlayTitle,startElement:jsx(OverlayTitleIcon,{fontSize:`20px`,role:`presentation`}),children:null})}):null})]}),listContent=jsx(EditorConfigContext.Provider,{value:editorConfigValue,children:jsx(TaxonomyOptionsContext.Provider,{value:taxonomyContextValue,children:coreContent})});return fieldExtensions===void 0?listContent:jsx(FieldExtensionsContext.Provider,{value:fieldExtensions,children:listContent})});export{MetadataFieldList as t};
|
|
1
|
+
import{d as isUnsupportedField,o as FieldType}from"./types.js";import{FieldTypeIcon}from"../esm/lib/utils/field-options/field-type-icon.js";import{EditorConfigContext,useEditorConfig}from"../esm/lib/components/metadata-field-configurator/context/editor-config-context.js";import{general}from"../esm/lib/components/metadata-field-configurator/messages/configurator-messages.js";import{useTemplateFieldSchema}from"../esm/lib/components/metadata-field-configurator/hooks/useTemplateFieldSchema.js";import{TaxonomyOptionsContext}from"../esm/lib/components/metadata-field-configurator/context/taxonomy-options-context.js";import{FieldExtensionsContext}from"../esm/lib/components/metadata-field-configurator/context/field-extensions-context.js";import{useTaxonomyFetch}from"../esm/lib/components/metadata-field-configurator/hooks/useTaxonomyFetch.js";import{MetadataFieldConfigurator}from"../esm/lib/components/metadata-field-configurator/metadata-field-configurator.js";import{Accordion,InlineNotice}from"@box/blueprint-web";import{useIntl}from"react-intl";import{jsx,jsxs}from"react/jsx-runtime";import{forwardRef,useCallback,useEffect,useImperativeHandle,useMemo,useRef,useState}from"react";import*as Yup from"yup";import clsx from"clsx";import cloneDeep from"lodash/cloneDeep";import uniqueId from"lodash/uniqueId";import{DndContext,DragOverlay,KeyboardSensor,PointerSensor,TouchSensor,closestCenter,useSensor,useSensors}from"@dnd-kit/core";import{SortableContext,arrayMove,sortableKeyboardCoordinates,useSortable,verticalListSortingStrategy}from"@dnd-kit/sortable";import{CSS}from"@dnd-kit/utilities";import '../styles/metadata-field-list.css';var metadata_field_list_module_default={fieldList:`_fieldList_18x5c_1`,fieldItem:`_fieldItem_18x5c_11`,dragging:`_dragging_18x5c_11`,accordionRootContainer:`_accordionRootContainer_18x5c_15`},FIELDS_AGGREGATE_VALIDATION_DEBOUNCE_MS=150;function getFieldId(field){return field.id}var ACCORDION_ANIMATION_MS=150,FieldListKeyboardSensor=class extends KeyboardSensor{static activators=[{eventName:`onKeyDown`,handler:(event,options,context)=>{let target=event.nativeEvent?.target??event.target??null;return target instanceof HTMLElement&&[`BUTTON`,`INPUT`,`SELECT`,`TEXTAREA`,`A`].includes(target.tagName)?!1:KeyboardSensor.activators[0].handler(event,options,context)}}]};function SortableFieldItem({field,index,maxIndex,isExpanded,onChangeField,onDeleteAtIndex,onDuplicateAtIndex,onReorderFields,onRequestExpand,submitAttemptCount}){let id=getFieldId(field),{attributes,listeners,setNodeRef,transform,transition,isDragging}=useSortable({id,disabled:isUnsupportedField(field)});return jsx(`li`,{ref:setNodeRef,style:{transform:CSS.Translate.toString(transform),transition},"data-field-id":id,className:clsx(metadata_field_list_module_default.fieldItem,{[metadata_field_list_module_default.dragging]:isDragging}),children:jsx(MetadataFieldConfigurator,{values:field,onValuesChange:onChangeField,index,maxIndex,onDelete:()=>onDeleteAtIndex(index),onDuplicate:()=>onDuplicateAtIndex(index),onReorderFields,dndDragHandleProps:{listeners,attributes},isExpanded,onExpandedChange:expanded=>{expanded&&onRequestExpand()},submitAttemptCount})})}var MetadataFieldList=forwardRef(function({fields,onChangeFields,onDeleteFieldAtIndex,onDuplicateField,taxonomyOptions,fetchTaxonomies,disabledFieldTypes,taxonomyInitialStateLabels,firstInvalidFieldIndex,submitAttemptCount,fieldExtensions,onValidationChange,readOnly=!1},ref){let{formatMessage}=useIntl(),parentEditorConfig=useEditorConfig(),taxonomyContextValue=useTaxonomyFetch(fetchTaxonomies,taxonomyOptions),fieldListRef=useRef(null),pendingScrollFieldIdRef=useRef(null),seenFieldIdsRef=useRef(new Set(fields.map(field=>getFieldId(field)))),fieldSchema=useTemplateFieldSchema(),lastEmittedAggregateValidRef=useRef(null);useEffect(()=>{lastEmittedAggregateValidRef.current=null},[onValidationChange]),useEffect(()=>{if(!onValidationChange)return;let cancelled=!1,timeoutId=setTimeout(()=>{Yup.array().of(fieldSchema).validate(fields,{abortEarly:!0}).then(()=>{cancelled||lastEmittedAggregateValidRef.current===!0||(lastEmittedAggregateValidRef.current=!0,onValidationChange(!0))}).catch(()=>{cancelled||lastEmittedAggregateValidRef.current===!1||(lastEmittedAggregateValidRef.current=!1,onValidationChange(!1))})},FIELDS_AGGREGATE_VALIDATION_DEBOUNCE_MS);return()=>{cancelled=!0,clearTimeout(timeoutId)}},[fields,fieldSchema,onValidationChange]);let[expandedFieldKey,setExpandedFieldKey]=useState(()=>{let firstNewField=fields.find(f=>f.isFieldNew);return firstNewField?getFieldId(firstNewField):null});useImperativeHandle(ref,()=>({scrollToAndExpand(fieldId){pendingScrollFieldIdRef.current=fieldId,expandedFieldKey===fieldId?(pendingScrollFieldIdRef.current=null,setTimeout(()=>{(fieldListRef.current?.querySelector(`[data-field-id="${fieldId}"]`))?.scrollIntoView({behavior:`smooth`,block:`nearest`})},0)):setExpandedFieldKey(fieldId)}}),[expandedFieldKey]),useEffect(()=>{fields.forEach(field=>{let id=getFieldId(field);seenFieldIdsRef.current.has(id)||(seenFieldIdsRef.current.add(id),pendingScrollFieldIdRef.current=id,setExpandedFieldKey(id))})},[fields]),useEffect(()=>{if(firstInvalidFieldIndex==null||!submitAttemptCount)return;let field=fields[firstInvalidFieldIndex];if(!field)return;let fieldId=getFieldId(field);setExpandedFieldKey(fieldId),requestAnimationFrame(()=>{(fieldListRef.current?.querySelector(`[data-field-id="${fieldId}"]`))?.scrollIntoView({behavior:`smooth`,block:`nearest`})})},[submitAttemptCount]),useEffect(()=>{let fieldId=pendingScrollFieldIdRef.current;if(!fieldId||fieldId!==expandedFieldKey)return;pendingScrollFieldIdRef.current=null;let timer=setTimeout(()=>{(fieldListRef.current?.querySelector(`[data-field-id="${fieldId}"]`))?.scrollIntoView({behavior:`smooth`,block:`nearest`})},ACCORDION_ANIMATION_MS);return()=>clearTimeout(timer)},[expandedFieldKey]);let[activeFieldId,setActiveFieldId]=useState(null),sensors=useSensors(useSensor(PointerSensor,{activationConstraint:{distance:8}}),useSensor(TouchSensor,{activationConstraint:{delay:250,tolerance:5}}),useSensor(FieldListKeyboardSensor,{coordinateGetter:sortableKeyboardCoordinates})),handleDragStart=useCallback(event=>{setActiveFieldId(String(event.active.id))},[]),handleDragEnd=useCallback(event=>{setActiveFieldId(null);let{active,over}=event;if(over&&active.id!==over.id){let oldIndex=fields.findIndex(f=>getFieldId(f)===active.id),newIndex=fields.findIndex(f=>getFieldId(f)===over.id);oldIndex!==-1&&newIndex!==-1&&!isUnsupportedField(fields[oldIndex])&&onChangeFields?.(arrayMove(fields,oldIndex,newIndex))}},[fields,onChangeFields]),handleDragCancel=useCallback(()=>{setActiveFieldId(null)},[]),handleFieldChange=useCallback((index,field)=>{onChangeFields?.(fields.map((f,i)=>i===index?field:f))},[fields,onChangeFields]),handleDeleteAtIndex=useCallback(index=>{let fieldToDelete=fields[index],fieldId=getFieldId(fieldToDelete);setExpandedFieldKey(prev=>prev===fieldId?null:prev),onChangeFields?.(fields.filter((_,i)=>i!==index)),onDeleteFieldAtIndex?.(index,fieldToDelete)},[fields,onChangeFields,onDeleteFieldAtIndex]),handleDuplicateAtIndex=useCallback(index=>{let fieldToDuplicate=fields[index];if(isUnsupportedField(fieldToDuplicate))return;let duplicated=cloneDeep(fieldToDuplicate);duplicated.id=uniqueId(`field-`),duplicated.key=``,duplicated.isFieldNew=!0,duplicated.type===FieldType.Dropdown&&(duplicated.dropdown.options=duplicated.dropdown.options.map(opt=>({...opt,id:uniqueId()})));let newFields=[...fields];newFields.splice(index+1,0,duplicated),onChangeFields?.(newFields),onDuplicateField?.(duplicated)},[fields,onChangeFields,onDuplicateField]),handleReorderFields=useCallback((fromIndex,toIndex)=>{toIndex<0||toIndex>=fields.length||isUnsupportedField(fields[fromIndex])||onChangeFields?.(arrayMove(fields,fromIndex,toIndex))},[fields,onChangeFields]),handleAccordionValueChange=useCallback(value=>{let newKey=value||null;setExpandedFieldKey(newKey),newKey&&setTimeout(()=>{(fieldListRef.current?.querySelector(`[data-field-id="${newKey}"]`))?.scrollIntoView({behavior:`smooth`,block:`nearest`})},ACCORDION_ANIMATION_MS)},[]),items=fields.map(f=>getFieldId(f)),activeField=activeFieldId?fields.find(f=>getFieldId(f)===activeFieldId):null,OverlayTitleIcon=activeField?FieldTypeIcon(activeField.type):null,overlayTitle=activeField?(field=>{let name=field.name||formatMessage(general.fieldNameInputPlaceholder);return field.type===FieldType.Dropdown?`${name} (${field.dropdown?.options?.length??0})`:name})(activeField):``,editorConfigValue=useMemo(()=>({disabledFieldTypes:disabledFieldTypes??parentEditorConfig.disabledFieldTypes,taxonomyInitialStateLabels:taxonomyInitialStateLabels??parentEditorConfig.taxonomyInitialStateLabels}),[disabledFieldTypes,taxonomyInitialStateLabels,parentEditorConfig]),listItems=readOnly?jsx(`ul`,{ref:fieldListRef,className:metadata_field_list_module_default.fieldList,children:fields.map((field,index)=>{let fieldId=getFieldId(field);return jsx(`li`,{"data-field-id":fieldId,className:metadata_field_list_module_default.fieldItem,children:jsx(MetadataFieldConfigurator,{values:field,onValuesChange:()=>void 0,index,maxIndex:fields.length-1,onDuplicate:()=>void 0,onReorderFields:()=>void 0,onDragStart:()=>void 0,onDragEnd:()=>void 0,onTouchStart:()=>void 0,isExpanded:expandedFieldKey===fieldId,onExpandedChange:expanded=>{expanded&&setExpandedFieldKey(fieldId)},readOnly:!0})},fieldId)})}):jsx(SortableContext,{items,strategy:verticalListSortingStrategy,children:jsx(`ul`,{ref:fieldListRef,className:metadata_field_list_module_default.fieldList,children:fields.map((field,index)=>{let fieldId=getFieldId(field);return jsx(SortableFieldItem,{field,index,maxIndex:fields.length-1,isExpanded:expandedFieldKey===fieldId,onChangeField:updatedField=>handleFieldChange(index,updatedField),onDeleteAtIndex:handleDeleteAtIndex,onDuplicateAtIndex:handleDuplicateAtIndex,onReorderFields:handleReorderFields,onRequestExpand:()=>setExpandedFieldKey(fieldId),submitAttemptCount},fieldId)})})}),accordionContainer=jsx(`div`,{className:metadata_field_list_module_default.accordionRootContainer,children:jsx(Accordion,{type:`single`,collapsible:!0,value:expandedFieldKey??``,onValueChange:handleAccordionValueChange,children:listItems})}),coreContent=readOnly?accordionContainer:jsxs(DndContext,{sensors,collisionDetection:closestCenter,onDragStart:handleDragStart,onDragEnd:handleDragEnd,onDragCancel:handleDragCancel,children:[accordionContainer,jsx(DragOverlay,{dropAnimation:null,children:activeField&&OverlayTitleIcon?jsx(Accordion,{type:`single`,children:jsx(Accordion.Item,{value:`ghost`,title:overlayTitle,startElement:jsx(OverlayTitleIcon,{fontSize:`20px`,role:`presentation`}),children:null})}):null})]}),hasUnsupportedFields=useMemo(()=>fields.some(field=>isUnsupportedField(field)),[fields]),listContent=jsx(EditorConfigContext.Provider,{value:editorConfigValue,children:jsxs(TaxonomyOptionsContext.Provider,{value:taxonomyContextValue,children:[hasUnsupportedFields&&jsx(InlineNotice,{variant:`warning`,variantIconAriaLabel:formatMessage(general.unsupportedFieldsBanner),children:formatMessage(general.unsupportedFieldsBanner)}),coreContent]})});return fieldExtensions===void 0?listContent:jsx(FieldExtensionsContext.Provider,{value:fieldExtensions,children:listContent})});export{MetadataFieldList as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{s as MetadataTemplateEditorMode}from"./types.js";import messages_default from"../esm/lib/messages.js";import{t as MetadataTemplateEditor}from"./metadata-template-editor.js";import{Modal}from"@box/blueprint-web";import{useIntl}from"react-intl";import{Fragment,jsx,jsxs}from"react/jsx-runtime";import{useCallback,useEffect,useId,useRef,useState}from"react";import clsx from"clsx";import '../styles/metadata-template-editor-modal.css';var metadata_template_editor_modal_module_default={modal:`_modal_7kuew_1`,modalScrollableContainer:`_modalScrollableContainer_7kuew_6`,modalBody:`_modalBody_7kuew_12`,modalBodyCentered:`_modalBodyCentered_7kuew_20`,modalContentWidth:`_modalContentWidth_7kuew_25`};function MetadataTemplateEditorModal({open,onOpenChange,onTemplateLoad,onValidationChange,onCancel,title,...editorProps}){let intl=useIntl(),formId=useId(),editorRef=useRef(null),[isSubmitting,setIsSubmitting]=useState(!1),[isDirty,setIsDirty]=useState(!1),[loadedTemplateName,setLoadedTemplateName]=useState(void 0),isEditMode=editorProps.mode===MetadataTemplateEditorMode.Edit,isReadOnlyMode=editorProps.mode===MetadataTemplateEditorMode.ReadOnly,closeEditor=useCallback(()=>{onCancel?.(),onOpenChange(!1)},[onCancel,onOpenChange]);useEffect(()=>{open||(setIsDirty(!1),setLoadedTemplateName(void 0))},[open]);let handleOpenChange=newOpen=>{newOpen?onOpenChange(newOpen):editorRef.current?.requestClose()},handleTemplateLoad=template=>{setLoadedTemplateName(template.displayName),onTemplateLoad?.(template)},wrapSubmit=callback=>async(...args)=>{setIsSubmitting(!0);try{await callback(...args),onOpenChange(!1)}finally{setIsSubmitting(!1)}},wrappedEditorProps;wrappedEditorProps=isEditMode?{...editorProps,onEditTemplate:wrapSubmit(editorProps.onEditTemplate)}:isReadOnlyMode?editorProps:{...editorProps,onCreateTemplate:wrapSubmit(editorProps.onCreateTemplate)};let isSaveDisabled=isSubmitting||isEditMode&&!isDirty,isBodyCentered=(isEditMode||isReadOnlyMode)&&!loadedTemplateName,defaultTitle;defaultTitle=isReadOnlyMode?loadedTemplateName?intl.formatMessage(messages_default.viewTitle,{templateName:loadedTemplateName}):``:isEditMode&&loadedTemplateName?intl.formatMessage(messages_default.editTitle,{templateName:loadedTemplateName}):intl.formatMessage(messages_default.createTitle);let modalTitle=title??defaultTitle;return jsx(Modal,{open,onOpenChange:handleOpenChange,children:jsxs(Modal.Content,{size:`large`,className:metadata_template_editor_modal_module_default.modal,children:[jsx(Modal.Header,{children:modalTitle}),jsx(Modal.ScrollableContainer,{className:metadata_template_editor_modal_module_default.modalScrollableContainer,children:jsx(Modal.Body,{className:clsx(metadata_template_editor_modal_module_default.modalBody,{[metadata_template_editor_modal_module_default.modalBodyCentered]:isBodyCentered}),children:jsx(`div`,{className:metadata_template_editor_modal_module_default.modalContentWidth,children:jsx(MetadataTemplateEditor,{...wrappedEditorProps,ref:editorRef,formId,hideActions:!0,onCancel:closeEditor,onDirtyStateChange:setIsDirty,onValidationChange,onTemplateLoad:handleTemplateLoad})})})}),jsx(Modal.Footer,{children:isReadOnlyMode?jsx(Modal.Footer.PrimaryButton,{onClick:closeEditor,size:`large`,children:intl.formatMessage(messages_default.close)}):jsxs(Fragment,{children:[jsx(Modal.Footer.SecondaryButton,{onClick:()=>editorRef.current?.requestClose(),size:`large`,children:intl.formatMessage(messages_default.cancel)}),jsx(Modal.Footer.PrimaryButton,{variant:`primary`,type:`submit`,form:formId,loading:isSubmitting,loadingAriaLabel:intl.formatMessage(messages_default.submitting),disabled:isSaveDisabled,children:intl.formatMessage(messages_default.save)})]})}),jsx(Modal.Close,{"aria-label":intl.formatMessage(messages_default.closeAriaLabel)})]})})}export{MetadataTemplateEditorModal as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{s as MetadataTemplateEditorMode}from"./types.js";import{EditorConfigContext}from"../esm/lib/components/metadata-field-configurator/context/editor-config-context.js";import"../esm/lib/utils/constants.js";import ConfirmationModal from"../esm/lib/components/metadata-field-configurator/components/confirmation-modal/confirmation-modal.js";import messages_default from"../esm/lib/messages.js";import{t as MetadataTemplateEditorForm}from"./metadata-template-editor-form.js";import{useMetadataTemplateFormSchema}from"../esm/lib/hooks/useMetadataTemplateFormSchema.js";import{convertApiMetadataTemplateFieldToLocalConfiguratorField}from"../esm/lib/utils/template-type-conversion/convertTemplateFieldToLocalConfigurator.js";import{generateJSONPatchTemplateOperations}from"../esm/lib/utils/template-type-conversion/generateJSONPatchTemplateOperations.js";import{mapFieldsWithUniqueKeys}from"../esm/lib/utils/template-type-conversion/mapFieldsWithUniqueKeys.js";import{EmptyState,LoadingIndicator,Text,useNotification}from"@box/blueprint-web";import{useIntl}from"react-intl";import{jsx,jsxs}from"react/jsx-runtime";import{forwardRef,useCallback,useEffect,useImperativeHandle,useMemo,useState}from"react";import{ArrowsRotating}from"@box/blueprint-web-assets/icons/Line";import{ErrorState404}from"@box/blueprint-web-assets/illustrations/Medium";import{Formik}from"formik";import '../styles/metadata-template-editor.css';var metadata_template_editor_module_default={loading:`_loading_fd3t9_1`,error:`_error_fd3t9_8`},DEFAULT_VALUES={displayName:``,templateKey:``,fields:[],hidden:!1},MetadataTemplateEditor=forwardRef(function({onCancel,onDirtyStateChange,onValidationChange,onSubmitError,onTemplateLoad,taxonomyOptions,fetchTaxonomies,disabledFieldTypes,taxonomyInitialStateLabels,formId,hideActions=!1,fieldExtensions,...modeProps},ref){let schema=useMetadataTemplateFormSchema(),{formatMessage}=useIntl(),{addNotification}=useNotification(),isEditMode=modeProps.mode===MetadataTemplateEditorMode.Edit,isReadOnlyMode=modeProps.mode===MetadataTemplateEditorMode.ReadOnly,[isDirty,setIsDirty]=useState(!1),[isUnsavedChangesModalOpen,setIsUnsavedChangesModalOpen]=useState(!1),handleCancel=useCallback(()=>{isDirty?setIsUnsavedChangesModalOpen(!0):onCancel?.()},[isDirty,onCancel]);useImperativeHandle(ref,()=>({requestClose:handleCancel}),[handleCancel]);let handleDirtyStateChange=useCallback(dirty=>{setIsDirty(dirty),onDirtyStateChange?.(dirty)},[onDirtyStateChange]),[isLoading,setIsLoading]=useState(isEditMode||isReadOnlyMode),[hasFetchError,setHasFetchError]=useState(!1),[retryCount,setRetryCount]=useState(0),[fetchedValues,setFetchedValues]=useState(void 0),fetchTemplate=isEditMode||isReadOnlyMode?modeProps.fetchTemplate:void 0,handleRetry=()=>{setRetryCount(c=>c+1)};useEffect(()=>{if(!fetchTemplate)return;let cancelled=!1;return setIsLoading(!0),setHasFetchError(!1),setFetchedValues(void 0),(async()=>{try{let response=await fetchTemplate();cancelled||setFetchedValues(response)}catch{cancelled||setHasFetchError(!0)}finally{cancelled||setIsLoading(!1)}})(),()=>{cancelled=!0}},[fetchTemplate,retryCount]),useEffect(()=>{fetchedValues!==void 0&&onTemplateLoad?.(fetchedValues)},[fetchedValues,onTemplateLoad]);let createNamespace=isEditMode||isReadOnlyMode?void 0:modeProps.namespace,mergedInitialValues=useMemo(()=>fetchedValues?{displayName:fetchedValues.displayName,templateKey:fetchedValues.templateKey,namespace:fetchedValues.namespace,hidden:fetchedValues.hidden,fields:fetchedValues.fields.map(field=>convertApiMetadataTemplateFieldToLocalConfiguratorField(field))}:{...DEFAULT_VALUES,namespace:createNamespace??``},[fetchedValues,createNamespace]),editorConfigValue=useMemo(()=>({disabledFieldTypes,taxonomyInitialStateLabels}),[disabledFieldTypes,taxonomyInitialStateLabels]);return isLoading?jsx(`div`,{className:metadata_template_editor_module_default.loading,children:jsx(LoadingIndicator,{size:`large`,"aria-label":formatMessage(messages_default.loading)})}):hasFetchError?jsx(`div`,{className:metadata_template_editor_module_default.error,children:jsx(EmptyState,{body:jsx(Text,{as:`p`,children:formatMessage(messages_default.fetchError)}),illustration:ErrorState404,size:`large`,children:jsx(EmptyState.PrimaryAction,{startIcon:ArrowsRotating,onClick:handleRetry,children:formatMessage(messages_default.reload)})})}):jsxs(EditorConfigContext.Provider,{value:editorConfigValue,children:[jsx(Formik,{initialValues:mergedInitialValues,validationSchema:isReadOnlyMode?void 0:schema,onSubmit:async values=>{if(!isReadOnlyMode)try{if(isEditMode){let patchItems=generateJSONPatchTemplateOperations(mergedInitialValues,values);await modeProps.onEditTemplate(patchItems,{namespaceFQN:mergedInitialValues.namespace,templateKey:mergedInitialValues.templateKey})}else{let convertedFields=mapFieldsWithUniqueKeys(values.fields),createBody={namespace:values.namespace,templateKey:values.templateKey,displayName:values.displayName,hidden:values.hidden,fields:convertedFields};await modeProps.onCreateTemplate(createBody)}addNotification({sensitivity:`foreground`,variant:`success`,styledText:formatMessage(messages_default.saveSuccessNotification),typeIconAriaLabel:formatMessage(messages_default.notificationSuccessIconAriaLabel),closeButtonAriaLabel:formatMessage(messages_default.notificationCloseButtonAriaLabel)})}catch(error){let errorMessage;if(error instanceof Error&&`status`in error){let{status}=error;errorMessage=formatMessage(status===409?messages_default.displayNameUsedBefore:messages_default.saveErrorNotification)}else errorMessage=formatMessage(messages_default.saveErrorNotification);addNotification({sensitivity:`foreground`,variant:`error`,styledText:errorMessage,typeIconAriaLabel:formatMessage(messages_default.notificationErrorIconAriaLabel),closeButtonAriaLabel:formatMessage(messages_default.notificationCloseButtonAriaLabel)});try{onSubmitError?.(error)}catch{}throw error}},children:jsx(MetadataTemplateEditorForm,{formId,onCancel:handleCancel,taxonomyOptions,fetchTaxonomies,hideActions,isEditMode,readOnly:isReadOnlyMode,onDirtyStateChange:handleDirtyStateChange,onValidationChange,fieldExtensions})}),isUnsavedChangesModalOpen&&jsx(ConfirmationModal,{onClose:()=>setIsUnsavedChangesModalOpen(!1),onConfirm:()=>{setIsUnsavedChangesModalOpen(!1),onCancel?.()},title:formatMessage(messages_default.unsavedChangesTitle),body:formatMessage(messages_default.unsavedChangesBody),confirmLabel:formatMessage(messages_default.unsavedChangesDiscard),cancelLabel:formatMessage(messages_default.unsavedChangesKeepEditing)})]})});export{MetadataTemplateEditor as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{l as TaxonomySelection}from"./types.js";import{useFieldConfigurator}from"../esm/lib/components/metadata-field-configurator/context/field-configurator-context.js";import{useTaxonomyOptions}from"../esm/lib/components/metadata-field-configurator/context/taxonomy-options-context.js";import taxonomy_messages_default from"../esm/lib/components/metadata-field-configurator/messages/taxonomy-messages.js";import{t as LevelsChain}from"./levels-chain.js";import{t as TaxonomyFieldConfiguratorInitialState}from"./taxonomy-field-configurator-initial-state.js";import{useTaxonomySelect}from"../esm/lib/components/metadata-field-configurator/components/type-specific-configuration/taxonomy/useTaxonomySelect.js";import{filterTaxonomiesByValue}from"../esm/lib/components/metadata-field-configurator/components/type-specific-configuration/taxonomy/utils.js";import{t as TaxonomySelector}from"./taxonomy-selector.js";import{DropdownMenu,InlineNotice,Radio,Switch,TextButton}from"@box/blueprint-web";import{useIntl}from"react-intl";import{Fragment,jsx,jsxs}from"react/jsx-runtime";import{Caret}from"@box/blueprint-web-assets/icons/Fill";import{useEffect,useMemo}from"react";import '../styles/taxonomy-field-configuration.css';var taxonomy_field_configuration_module_default={taxonomyFieldConfiguration:`_taxonomyFieldConfiguration_1smhd_1`},TaxonomyFieldConfiguration=()=>{let{formatMessage}=useIntl(),{values,errors,touched,setFieldValue}=useFieldConfigurator(),{onTaxonomySelect}=useTaxonomySelect({values,setFieldValue}),{options:taxonomyOptionsFromContext}=useTaxonomyOptions(),selectedTaxonomy=values.taxonomy.availableTaxonomies.find(taxonomy=>taxonomy.selected),{selectedLevels}=values.taxonomy,selectableLevels=useMemo(()=>selectedTaxonomy?selectedTaxonomy.levels:[],[selectedTaxonomy]),selectedLevelName=values.taxonomy.selection===TaxonomySelection.RequireSpecific&&selectedLevels.length>0?selectableLevels[selectedLevels[0]-1]?.name:void 0;useEffect(()=>{taxonomyOptionsFromContext.length>0&&setFieldValue(`taxonomy`,{...values.taxonomy,availableTaxonomies:taxonomyOptionsFromContext.map(taxonomy=>({...taxonomy,selected:taxonomy.taxonomyKey===values.taxonomy.taxonomyKey})),selectedLevels:values.taxonomy.selectedLevels,selection:values.taxonomy.selectedLevels.length>1?TaxonomySelection.AllowAny:TaxonomySelection.RequireSpecific})},[taxonomyOptionsFromContext]);let handleSelectionChange=value=>{let newSelectedLevels=value===TaxonomySelection.AllowAny?selectableLevels.map(l=>l.level):[selectableLevels[0].level];setFieldValue(`taxonomy`,{...values.taxonomy,selection:value,selectedLevels:newSelectedLevels})},taxonomySelectorLabel=selectedTaxonomy?.label??formatMessage(taxonomy_messages_default.chooseTaxonomyLevel),hasTaxonomyError=!!errors.taxonomy?.taxonomyKey&&!!touched.taxonomy?.taxonomyKey;if(!selectedTaxonomy&&values.isFieldNew)return jsxs(Fragment,{children:[hasTaxonomyError&&jsx(InlineNotice,{variant:`error`,variantIconAriaLabel:formatMessage(taxonomy_messages_default.noTaxonomySelectedError),children:formatMessage(taxonomy_messages_default.noTaxonomySelectedError)}),jsx(TaxonomyFieldConfiguratorInitialState,{})]});let isDisabled=values.isFieldReadOnly||!values.isFieldNew;return jsxs(`div`,{className:taxonomy_field_configuration_module_default.taxonomyFieldConfiguration,children:[jsx(Switch.Item,{name:`allowMultipleSelections`,disabled:isDisabled,checked:values.taxonomy.allowMultipleSelections,label:formatMessage(taxonomy_messages_default.allowMultipleTaxonomySelections),onCheckedChange:checked=>{setFieldValue(`taxonomy`,{...values.taxonomy,allowMultipleSelections:checked})},value:values.taxonomy.allowMultipleSelections.toString()}),jsx(`div`,{children:jsx(TaxonomySelector,{triggerButton:jsx(TextButton,{disabled:isDisabled,icon:Caret,children:taxonomySelectorLabel}),data:filterTaxonomiesByValue(values.taxonomy.availableTaxonomies,values.taxonomy.taxonomySearchValue),onClick:onTaxonomySelect,onSearchValue:value=>{setFieldValue(`taxonomy`,{...values.taxonomy,taxonomySearchValue:value})}})}),selectableLevels.length>0&&jsx(LevelsChain,{levels:selectableLevels,selectedLevels}),selectedTaxonomy&&selectableLevels.length>1&&jsx(Radio.Legend,{header:formatMessage(taxonomy_messages_default.selection),children:jsxs(Radio.Group,{disabled:isDisabled,defaultValue:TaxonomySelection.RequireSpecific,loop:!0,name:`selection`,onValueChange:handleSelectionChange,orientation:`vertical`,value:values.taxonomy.selection,children:[jsx(Radio.Item,{label:jsxs(Fragment,{children:[formatMessage(taxonomy_messages_default.requiredSelection),jsxs(DropdownMenu.Root,{modal:!1,children:[jsx(DropdownMenu.Trigger,{disabled:values.taxonomy.selection!==TaxonomySelection.RequireSpecific||isDisabled,children:jsx(TextButton,{icon:Caret,children:selectedLevelName??formatMessage(taxonomy_messages_default.chooseTaxonomyLevel)})}),jsx(DropdownMenu.Content,{align:`start`,children:selectedTaxonomy?.levels?.map(entry=>jsx(DropdownMenu.Item,{onClick:()=>{setFieldValue(`taxonomy`,{...values.taxonomy,selectedLevels:[entry.level]})},children:entry.name},entry.level))})]})]}),value:TaxonomySelection.RequireSpecific}),jsx(Radio.Item,{disabled:isDisabled,label:formatMessage(taxonomy_messages_default.anyLevelSelection),value:TaxonomySelection.AllowAny})]})})]})};export{TaxonomyFieldConfiguration as t};
|
package/dist/chunks/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var MetadataTemplateEditorMode=function(MetadataTemplateEditorMode){return MetadataTemplateEditorMode.Create=`create`,MetadataTemplateEditorMode.Edit=`edit`,MetadataTemplateEditorMode.ReadOnly=`readOnly`,MetadataTemplateEditorMode}({}),FieldType=function(FieldType){return FieldType.Text=`text`,FieldType.Number=`number`,FieldType.Date=`date`,FieldType.Dropdown=`dropdown`,FieldType.Taxonomy=`taxonomy`,FieldType}({}),TaxonomySelection=function(TaxonomySelection){return TaxonomySelection.RequireSpecific=`requireSpecific`,TaxonomySelection.AllowAny=`allowAny`,TaxonomySelection}({}),ApiMetadataTemplateFieldType=function(ApiMetadataTemplateFieldType){return ApiMetadataTemplateFieldType.Float=`float`,ApiMetadataTemplateFieldType.Taxonomy=`taxonomy`,ApiMetadataTemplateFieldType.MultiSelect=`multiSelect`,ApiMetadataTemplateFieldType.Date=`date`,ApiMetadataTemplateFieldType.String=`string`,ApiMetadataTemplateFieldType.Enum=`enum`,ApiMetadataTemplateFieldType}({}),TemplateOperations=function(TemplateOperations){return TemplateOperations.EditTemplate=`editTemplate`,TemplateOperations}({}),FieldOperations=function(FieldOperations){return FieldOperations.AddField=`addField`,FieldOperations.ReorderFields=`reorderFields`,FieldOperations.EditField=`editField`,FieldOperations.RemoveField=`removeField`,FieldOperations}({}),EnumOperations=function(EnumOperations){return EnumOperations.AddEnumOption=`addEnumOption`,EnumOperations.ReorderEnumOptions=`reorderEnumOptions`,EnumOperations.EditEnumOption=`editEnumOption`,EnumOperations.RemoveEnumOption=`removeEnumOption`,EnumOperations}({}),MultiSelectOperations=function(MultiSelectOperations){return MultiSelectOperations.AddMultiSelectOption=`addMultiSelectOption`,MultiSelectOperations.ReorderMultiSelectOptions=`reorderMultiSelectOptions`,MultiSelectOperations.EditMultiSelectOption=`editMultiSelectOption`,MultiSelectOperations.RemoveMultiSelectOption=`removeMultiSelectOption`,MultiSelectOperations}({}),AllOps={...TemplateOperations,...FieldOperations,...EnumOperations,...MultiSelectOperations};export{
|
|
1
|
+
var MetadataTemplateEditorMode=function(MetadataTemplateEditorMode){return MetadataTemplateEditorMode.Create=`create`,MetadataTemplateEditorMode.Edit=`edit`,MetadataTemplateEditorMode.ReadOnly=`readOnly`,MetadataTemplateEditorMode}({}),FieldType=function(FieldType){return FieldType.Text=`text`,FieldType.Number=`number`,FieldType.Date=`date`,FieldType.Dropdown=`dropdown`,FieldType.Taxonomy=`taxonomy`,FieldType.Unsupported=`unsupported`,FieldType}({}),CREATABLE_FIELD_TYPES=[`text`,`number`,`date`,`dropdown`,`taxonomy`],isUnsupportedField=field=>field.type===`unsupported`,TaxonomySelection=function(TaxonomySelection){return TaxonomySelection.RequireSpecific=`requireSpecific`,TaxonomySelection.AllowAny=`allowAny`,TaxonomySelection}({}),ApiMetadataTemplateFieldType=function(ApiMetadataTemplateFieldType){return ApiMetadataTemplateFieldType.Float=`float`,ApiMetadataTemplateFieldType.Taxonomy=`taxonomy`,ApiMetadataTemplateFieldType.MultiSelect=`multiSelect`,ApiMetadataTemplateFieldType.Date=`date`,ApiMetadataTemplateFieldType.String=`string`,ApiMetadataTemplateFieldType.Enum=`enum`,ApiMetadataTemplateFieldType}({}),TemplateOperations=function(TemplateOperations){return TemplateOperations.EditTemplate=`editTemplate`,TemplateOperations}({}),FieldOperations=function(FieldOperations){return FieldOperations.AddField=`addField`,FieldOperations.ReorderFields=`reorderFields`,FieldOperations.EditField=`editField`,FieldOperations.RemoveField=`removeField`,FieldOperations}({}),EnumOperations=function(EnumOperations){return EnumOperations.AddEnumOption=`addEnumOption`,EnumOperations.ReorderEnumOptions=`reorderEnumOptions`,EnumOperations.EditEnumOption=`editEnumOption`,EnumOperations.RemoveEnumOption=`removeEnumOption`,EnumOperations}({}),MultiSelectOperations=function(MultiSelectOperations){return MultiSelectOperations.AddMultiSelectOption=`addMultiSelectOption`,MultiSelectOperations.ReorderMultiSelectOptions=`reorderMultiSelectOptions`,MultiSelectOperations.EditMultiSelectOption=`editMultiSelectOption`,MultiSelectOperations.RemoveMultiSelectOption=`removeMultiSelectOption`,MultiSelectOperations}({}),AllOps={...TemplateOperations,...FieldOperations,...EnumOperations,...MultiSelectOperations};export{FieldOperations as a,MultiSelectOperations as c,isUnsupportedField as d,EnumOperations as i,TaxonomySelection as l,ApiMetadataTemplateFieldType as n,FieldType as o,CREATABLE_FIELD_TYPES as r,MetadataTemplateEditorMode as s,AllOps as t,TemplateOperations as u};
|
package/dist/esm/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as FieldSelector}from"../chunks/field-selector.js";import{a as
|
|
1
|
+
import{t as FieldSelector}from"../chunks/field-selector.js";import{a as FieldOperations,c as MultiSelectOperations,d as isUnsupportedField,i as EnumOperations,l as TaxonomySelection,n as ApiMetadataTemplateFieldType,o as FieldType,r as CREATABLE_FIELD_TYPES,s as MetadataTemplateEditorMode,t as AllOps,u as TemplateOperations}from"../chunks/types.js";import{EditorConfigContext,useEditorConfig}from"./lib/components/metadata-field-configurator/context/editor-config-context.js";import{t as FieldTypeDropdown}from"../chunks/field-type-dropdown.js";import{FieldTypeTiles}from"./lib/components/field-type-tiles/field-type-tiles.js";import{useTemplateFieldSchema}from"./lib/components/metadata-field-configurator/hooks/useTemplateFieldSchema.js";import ConfirmationModal from"./lib/components/metadata-field-configurator/components/confirmation-modal/confirmation-modal.js";import{FieldActionSlot}from"./lib/components/metadata-field-configurator/components/field-action-slot/field-action-slot.js";import{FieldConfiguratorContext,useFieldConfigurator}from"./lib/components/metadata-field-configurator/context/field-configurator-context.js";import{TaxonomyOptionsContext,createStaticTaxonomyContext,useTaxonomyOptions}from"./lib/components/metadata-field-configurator/context/taxonomy-options-context.js";import{t as TaxonomyFieldConfiguration}from"../chunks/taxonomy-field-configuration.js";import{t as TaxonomySelector}from"../chunks/taxonomy-selector.js";import{createDefaultFieldValues}from"./lib/components/metadata-field-configurator/utils.js";import{FieldEditContent}from"./lib/components/metadata-field-configurator/components/field-edit-content/field-edit-content.js";import{FieldExtensionsContext,useFieldExtensions}from"./lib/components/metadata-field-configurator/context/field-extensions-context.js";import{useFieldConfiguratorBehavior}from"./lib/components/metadata-field-configurator/hooks/useFieldConfiguratorBehavior.js";import{MetadataFieldConfigurator}from"./lib/components/metadata-field-configurator/metadata-field-configurator.js";import{t as MetadataFieldList}from"../chunks/metadata-field-list.js";import{t as MetadataTemplateEditor}from"../chunks/metadata-template-editor.js";import{t as MetadataTemplateEditorModal}from"../chunks/metadata-template-editor-modal.js";import"./lib/components/metadata-template-editor-modal/index.js";export{AllOps,ApiMetadataTemplateFieldType,CREATABLE_FIELD_TYPES,ConfirmationModal,EditorConfigContext,EnumOperations,FieldActionSlot,FieldConfiguratorContext,FieldEditContent,FieldExtensionsContext,FieldOperations,FieldSelector,FieldType,FieldTypeDropdown,FieldTypeTiles,MetadataFieldConfigurator,MetadataFieldList,MetadataFieldList as MetadataFieldListDefault,MetadataTemplateEditor,MetadataTemplateEditorModal,MetadataTemplateEditorMode,MultiSelectOperations,TaxonomyFieldConfiguration,TaxonomyOptionsContext,TaxonomySelection,TaxonomySelector,TemplateOperations,createDefaultFieldValues,createStaticTaxonomyContext,isUnsupportedField,useEditorConfig,useFieldConfigurator,useFieldConfiguratorBehavior,useFieldExtensions,useTaxonomyOptions,useTemplateFieldSchema};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{d as isUnsupportedField,o as FieldType}from"../../../../../../chunks/types.js";import{useFieldOptions}from"../../../../utils/field-options/useFieldOptions.js";import{general}from"../../messages/configurator-messages.js";import{t as metadata_field_configurator_module_default}from"../../../../../../chunks/metadata-field-configurator.module.js";import{useFieldConfigurator}from"../../context/field-configurator-context.js";import{getConfigurationByType}from"../../utils.js";import{InlineNotice,Select,Text,TextInput,TextWithInfoBadge,TooltipProvider}from"@box/blueprint-web";import{useIntl}from"react-intl";import{jsx,jsxs}from"react/jsx-runtime";import{useMemo}from"react";var FieldEditContent=({nameInputId,descriptionInputId,isTypeEditable,externalErrors,externalTouched,handleTypeChange,hideDescription=!1,readOnly=!1})=>{let{formatMessage}=useIntl(),fieldTypes=useFieldOptions(),{values,errors,touched,handleChange,handleBlur}=useFieldConfigurator(),getFieldError=fieldName=>{if(externalErrors&&externalTouched?.[fieldName])return externalErrors[fieldName];let error=errors[fieldName];if(touched[fieldName]&&error!=null&&typeof error==`string`)return error},descriptionLabel=useMemo(()=>jsx(TooltipProvider,{children:jsx(TextWithInfoBadge,{infoBadgeAriaLabel:formatMessage(general.descriptionLearnMoreBadgeAriaLabel),infoText:formatMessage(general.descriptionInfoTooltip),children:jsx(Text,{as:`label`,className:metadata_field_configurator_module_default.labelWithTooltip,htmlFor:descriptionInputId,variant:`bodyDefaultBold`,children:formatMessage(general.fieldDescriptionLabel)})})}),[descriptionInputId,formatMessage]),isUnsupported=isUnsupportedField(values),unsupportedTypeLabel=values.originalApiType||values.type,isReadOnly=readOnly||values.isFieldReadOnly||isUnsupported;return jsx(`fieldset`,{className:metadata_field_configurator_module_default.fieldset,children:jsxs(`div`,{className:metadata_field_configurator_module_default.expandedContent,children:[isUnsupported&&jsx(InlineNotice,{variant:`warning`,variantIconAriaLabel:formatMessage(general.unsupportedFieldNotice,{fieldType:unsupportedTypeLabel}),children:formatMessage(general.unsupportedFieldNotice,{fieldType:unsupportedTypeLabel})}),jsxs(`div`,{className:metadata_field_configurator_module_default.basic,children:[jsx(TextInput,{name:`name`,id:nameInputId,label:formatMessage(general.fieldNameLabel),placeholder:formatMessage(general.fieldNameInputPlaceholder),value:values.name,error:isReadOnly?void 0:getFieldError(`name`),onChange:handleChange,onBlur:handleBlur,readOnly:isReadOnly,required:!isReadOnly}),isUnsupported?jsx(TextInput,{name:`type`,label:formatMessage(general.fieldTypeLabel),value:unsupportedTypeLabel,readOnly:!0}):jsx(Select,{name:`type`,label:formatMessage(general.fieldTypeLabel),placeholder:formatMessage(general.fieldTypePlaceholder),value:values.type,"aria-readonly":isReadOnly||!isTypeEditable,readonly:isReadOnly||!isTypeEditable,onValueChange:handleTypeChange,className:metadata_field_configurator_module_default.fieldTypeSelect,required:!isReadOnly,children:jsx(Select.Content,{children:fieldTypes.availableFieldTypes.map(fieldType=>jsx(Select.Option,{text:typeof fieldType.label==`string`?fieldType.label:String(fieldType.label),value:fieldType.type},fieldType.type))})})]}),!isUnsupported&&[FieldType.Dropdown,FieldType.Taxonomy].includes(values.type)&&jsx(`div`,{className:metadata_field_configurator_module_default.typeSpecific,children:getConfigurationByType(values.type)}),!hideDescription&&jsx(`div`,{className:metadata_field_configurator_module_default.description,children:jsx(TextInput,{name:`description`,id:descriptionInputId,label:descriptionLabel,placeholder:formatMessage(general.fieldDescriptionInputPlaceholder),value:values.description??``,error:isReadOnly?void 0:getFieldError(`description`),hideLabel:!0,readOnly:isReadOnly,onChange:handleChange,onBlur:handleBlur})})]})})};export{FieldEditContent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{o as FieldType}from"../../../../../../../../chunks/types.js";import{taxonomyDefaultValues}from"../../taxonomy/taxonomy-default-values.js";var mockOptions=[{id:`option1`,key:`Option 1`,isNew:!0},{id:`option2`,key:`Option 2`,isNew:!0},{id:`option3`,key:`Option 3`,isNew:!0}],getInitialValues=()=>({id:`mock-dropdown-field`,key:`test`,type:FieldType.Dropdown,name:`Test`,description:``,hidden:!1,isFieldNew:!0,isFieldReadOnly:!1,dropdown:{options:mockOptions,allowMultipleSelections:!1,isAllowMultipleSelectionsEnabled:!0},taxonomy:taxonomyDefaultValues.taxonomy});export{getInitialValues};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{l as TaxonomySelection}from"../../../../../../../chunks/types.js";var taxonomyDefaultValues={taxonomy:{availableTaxonomies:[],allowMultipleSelections:!1,selection:TaxonomySelection.RequireSpecific,selectedLevels:[],taxonomySearchValue:``,taxonomyKey:``,namespace:``}};export{taxonomyDefaultValues};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{l as TaxonomySelection,o as FieldType}from"../../../../../chunks/types.js";import{METADATA_TEMPLATE_FIELD_NAME_MAX_LENGTH}from"../../../utils/constants.js";import{validationErrors}from"../messages/configurator-messages.js";import{useIntl}from"react-intl";import{useMemo}from"react";import*as Yup from"yup";var useTemplateFieldSchema=()=>{let intl=useIntl();return useMemo(()=>{let displayNameSchema=Yup.string().min(1).max(METADATA_TEMPLATE_FIELD_NAME_MAX_LENGTH,intl.formatMessage(validationErrors.fieldNameTooLong)).required(intl.formatMessage(validationErrors.fieldNameCannotBeEmpty)).test(`no-whitespace-only`,intl.formatMessage(validationErrors.fieldNameCannotBeEmpty),value=>!value||value.trim().length>0),optionSchema=Yup.object().shape({key:Yup.string().required(intl.formatMessage(validationErrors.optionKeyCannotBeEmpty)).test(`unique-key`,intl.formatMessage(validationErrors.duplicateOption),(value,context)=>{if(!value)return!0;let option=context?.from?.[0]?.value,options=context?.from?.[1].value?.options??[],currentIndex=options.findIndex(opt=>opt.id===option?.id);return!options.some((opt,i)=>i!==currentIndex&&opt.key===value)})}),dropdownFieldSchemaParams=Yup.object().shape({dropdown:Yup.object().shape({allowMultipleSelections:Yup.boolean().required(),options:Yup.array().of(optionSchema).min(1).required()})}),taxonomyFieldSchemaParams=Yup.object().shape({taxonomy:Yup.object().shape({namespace:Yup.string().required(),taxonomyKey:Yup.string().required(),allowMultipleSelections:Yup.boolean().required(),selection:Yup.mixed().oneOf(Object.values(TaxonomySelection)).required(),selectedLevels:Yup.array().of(Yup.number().required()).min(1).required()})});return Yup.lazy(value=>{let baseSchema=Yup.object().shape({type:Yup.mixed().oneOf(Object.values(FieldType)).required(),name:displayNameSchema,description:Yup.string().nullable(),hidden:Yup.boolean().required(),originalApiType:Yup.string().nullable()});return value?.type===FieldType.Unsupported?baseSchema:value?.type===FieldType.Dropdown?baseSchema.concat(dropdownFieldSchemaParams):value?.type===FieldType.Taxonomy?baseSchema.concat(taxonomyFieldSchemaParams):baseSchema})},[intl])};export{useTemplateFieldSchema};
|
package/dist/esm/lib/components/metadata-field-configurator/messages/configurator-messages.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineMessages}from"react-intl";var general=defineMessages({fieldTypeLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.fieldTypeLabel`,defaultMessage:`Field Type`},fieldTypePlaceholder:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.fieldTypePlaceholder`,defaultMessage:`Select Type`},fieldNameLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.fieldNameLabel`,defaultMessage:`Field Name`},fieldNameInputPlaceholder:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.fieldNameInputPlaceholder`,defaultMessage:`Add a field name/label`},fieldDescriptionLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.fieldDescriptionLabel`,defaultMessage:`Field Description`},fieldDescriptionInputPlaceholder:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.fieldDescriptionInputPlaceholder`,defaultMessage:`Add custom help text that appears in a tooltip for users`},descriptionInfoTooltip:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.descriptionInfoTooltip`,defaultMessage:`The description is visible to anyone accessing the template. It also helps Box AI find and autofill Metadata for you.`},descriptionLearnMoreBadgeAriaLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.descriptionLearnMoreBadgeAriaLabel`,defaultMessage:`Learn more about the description field`},dragAndDropFieldAriaLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.dragAndDropFieldAriaLabel`,defaultMessage:`Drag and drop to reorder field`},hideField:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.hideField`,defaultMessage:`Hide Field`},showField:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.showField`,defaultMessage:`Make Visible`},hiddenStatus:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.hiddenStatus`,defaultMessage:`Hidden`},deleteFieldTitle:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.deleteFieldTitle`,defaultMessage:`Delete "{fieldName}" Field`},deleteFieldDescription:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.deleteFieldDescription`,defaultMessage:`All files or folders associated with this field will now have an unassigned value. This action cannot be undone once the template is saved.`},cancelDeleteField:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.cancelDeleteField`,defaultMessage:`Cancel`},confirmDeleteField:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.confirmDeleteField`,defaultMessage:`Confirm`},moveUp:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.moveUp`,defaultMessage:`Move Up`},moveUpAriaLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.moveUpAriaLabel`,defaultMessage:`Move field up`},moveDown:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.moveDown`,defaultMessage:`Move Down`},moveDownAriaLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.moveDownAriaLabel`,defaultMessage:`Move field down`},deleteField:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.deleteField`,defaultMessage:`Remove`},deleteFieldAriaLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.deleteFieldAriaLabel`,defaultMessage:`Delete field`},contextMenuAriaLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.contextMenuAriaLabel`,defaultMessage:`Field configurator context menu`},editTabAriaLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.editTabAriaLabel`,defaultMessage:`Edit field`},duplicateField:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.duplicateField`,defaultMessage:`Duplicate`},duplicateFieldAriaLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.duplicateFieldAriaLabel`,defaultMessage:`Duplicate field`}}),validationErrors=defineMessages({fieldNameCannotBeEmpty:{id:`groupSharedFeatures.metadataTemplateEditor.fields.validationErrors.fieldNameCannotBeEmpty`,defaultMessage:`Field name cannot be empty.`},fieldNameTooLong:{id:`groupSharedFeatures.metadataTemplateEditor.fields.validationErrors.fieldNameTooLong`,defaultMessage:`The field name is too long.`},duplicateOption:{id:`groupSharedFeatures.metadataTemplateEditor.fields.validationErrors.duplicateOption`,defaultMessage:`The option label must be unique.`},optionKeyCannotBeEmpty:{id:`groupSharedFeatures.metadataTemplateEditor.fields.validationErrors.optionKeyCannotBeEmpty`,defaultMessage:`Option cannot be empty.`},selectedLevelRequired:{id:`groupSharedFeatures.metadataTemplateEditor.fields.validationErrors.selectedLevelRequired`,defaultMessage:`Please select a level.`},thisFieldContainsErrors:{id:`groupSharedFeatures.metadataTemplateEditor.templates.details.fields.thisFieldContainsErrors`,defaultMessage:`This field contains validation errors.`}});export{general,validationErrors};
|
|
1
|
+
import{defineMessages}from"react-intl";var general=defineMessages({fieldTypeLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.fieldTypeLabel`,defaultMessage:`Field Type`},fieldTypePlaceholder:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.fieldTypePlaceholder`,defaultMessage:`Select Type`},fieldNameLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.fieldNameLabel`,defaultMessage:`Field Name`},fieldNameInputPlaceholder:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.fieldNameInputPlaceholder`,defaultMessage:`Add a field name/label`},fieldDescriptionLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.fieldDescriptionLabel`,defaultMessage:`Field Description`},fieldDescriptionInputPlaceholder:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.fieldDescriptionInputPlaceholder`,defaultMessage:`Add custom help text that appears in a tooltip for users`},descriptionInfoTooltip:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.descriptionInfoTooltip`,defaultMessage:`The description is visible to anyone accessing the template. It also helps Box AI find and autofill Metadata for you.`},descriptionLearnMoreBadgeAriaLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.descriptionLearnMoreBadgeAriaLabel`,defaultMessage:`Learn more about the description field`},dragAndDropFieldAriaLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.dragAndDropFieldAriaLabel`,defaultMessage:`Drag and drop to reorder field`},hideField:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.hideField`,defaultMessage:`Hide Field`},showField:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.showField`,defaultMessage:`Make Visible`},hiddenStatus:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.hiddenStatus`,defaultMessage:`Hidden`},deleteFieldTitle:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.deleteFieldTitle`,defaultMessage:`Delete "{fieldName}" Field`},deleteFieldDescription:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.deleteFieldDescription`,defaultMessage:`All files or folders associated with this field will now have an unassigned value. This action cannot be undone once the template is saved.`},cancelDeleteField:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.cancelDeleteField`,defaultMessage:`Cancel`},confirmDeleteField:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.confirmDeleteField`,defaultMessage:`Confirm`},moveUp:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.moveUp`,defaultMessage:`Move Up`},moveUpAriaLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.moveUpAriaLabel`,defaultMessage:`Move field up`},moveDown:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.moveDown`,defaultMessage:`Move Down`},moveDownAriaLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.moveDownAriaLabel`,defaultMessage:`Move field down`},deleteField:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.deleteField`,defaultMessage:`Remove`},deleteFieldAriaLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.deleteFieldAriaLabel`,defaultMessage:`Delete field`},contextMenuAriaLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.contextMenuAriaLabel`,defaultMessage:`Field configurator context menu`},editTabAriaLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.editTabAriaLabel`,defaultMessage:`Edit field`},duplicateField:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.duplicateField`,defaultMessage:`Duplicate`},duplicateFieldAriaLabel:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.duplicateFieldAriaLabel`,defaultMessage:`Duplicate field`},unsupportedFieldNotice:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.unsupportedFieldNotice`,defaultMessage:`This field type ({fieldType}) is no longer supported and is read-only. The only action available is to remove the field.`},unsupportedFieldsBanner:{id:`groupSharedFeatures.metadataTemplateEditor.configurator.unsupportedFieldsBanner`,defaultMessage:`This template includes field types that are no longer supported. Those fields are read-only; the only action available is to remove them.`}}),validationErrors=defineMessages({fieldNameCannotBeEmpty:{id:`groupSharedFeatures.metadataTemplateEditor.fields.validationErrors.fieldNameCannotBeEmpty`,defaultMessage:`Field name cannot be empty.`},fieldNameTooLong:{id:`groupSharedFeatures.metadataTemplateEditor.fields.validationErrors.fieldNameTooLong`,defaultMessage:`The field name is too long.`},duplicateOption:{id:`groupSharedFeatures.metadataTemplateEditor.fields.validationErrors.duplicateOption`,defaultMessage:`The option label must be unique.`},optionKeyCannotBeEmpty:{id:`groupSharedFeatures.metadataTemplateEditor.fields.validationErrors.optionKeyCannotBeEmpty`,defaultMessage:`Option cannot be empty.`},selectedLevelRequired:{id:`groupSharedFeatures.metadataTemplateEditor.fields.validationErrors.selectedLevelRequired`,defaultMessage:`Please select a level.`},thisFieldContainsErrors:{id:`groupSharedFeatures.metadataTemplateEditor.templates.details.fields.thisFieldContainsErrors`,defaultMessage:`This field contains validation errors.`}});export{general,validationErrors};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{general}from"./messages/configurator-messages.js";import ConfirmationModal from"./components/confirmation-modal/confirmation-modal.js";import{t as metadata_field_configurator_module_default}from"../../../../chunks/metadata-field-configurator.module.js";import{FieldActionSlot}from"./components/field-action-slot/field-action-slot.js";import{FieldConfiguratorContext}from"./context/field-configurator-context.js";import{TaxonomyOptionsContext}from"./context/taxonomy-options-context.js";import{FieldEditContent}from"./components/field-edit-content/field-edit-content.js";import{FieldExtensionsContext}from"./context/field-extensions-context.js";import{EDIT_TAB_ID,useFieldConfiguratorBehavior}from"./hooks/useFieldConfiguratorBehavior.js";import{Accordion,Tabs}from"@box/blueprint-web";import{useIntl}from"react-intl";import{Fragment,jsx,jsxs}from"react/jsx-runtime";import"react";var MetadataFieldConfigurator=({index,maxIndex,values,onValuesChange,onDelete,onDuplicate,onReorderFields,onTouchStart,onDragStart,onDragEnd,externalErrors,externalTouched,dndDragHandleProps,fieldCollapsedText,isExpanded,onExpandedChange,taxonomyOptions,fetchTaxonomies,submitAttemptCount,fieldExtensions:fieldExtensionsProp,onValidationChange,readOnly=!1})=>{let intl=useIntl(),{contextValue,taxonomyContextValue,extensions,isActive,handleAccordionValueChange,isDeleteConfirmationModalOpen,openConfirmationModal,closeConfirmationModal,handleDeleteField,activeTabId,setActiveTabId,isTypeEditable,uniqueKey,nameInputId,descriptionInputId,accordionTitle,TitleIcon,hasErrors,handleTypeChange,handleChangeVisibility}=useFieldConfiguratorBehavior({values,onValuesChange,onDelete,isExpanded,onExpandedChange,submitAttemptCount,taxonomyOptions,fetchTaxonomies,fieldExtensionsProp,onValidationChange}),effectiveContextValue=readOnly?{...contextValue,values:{...contextValue.values,isFieldReadOnly:!0}}:contextValue,editContent=jsx(FieldEditContent,{nameInputId,descriptionInputId,isTypeEditable,externalErrors,externalTouched,handleTypeChange,readOnly}),accordionBody=extensions.length>0?jsxs(Fragment,{children:[jsx(Tabs.TabPanel,{tabId:EDIT_TAB_ID,children:editContent}),extensions.map((ext,i)=>jsx(Tabs.TabPanel,{tabId:`ext-${i}`,className:metadata_field_configurator_module_default.extensionContent,children:ext.renderContent(values)},ext.label))]}):editContent,isDraggable=isExpanded===!1,accordionItemEl=jsx(Accordion.Item,{highlighted:!0,startElement:jsx(TitleIcon,{fontSize:`20px`,role:`presentation`}),value:uniqueKey,title:accordionTitle,action:jsx(FieldActionSlot,{fieldCollapsedText,isHidden:values.hidden,isExpanded:isActive,index,maxIndex,onReorderFields,onToggleVisibility:handleChangeVisibility,onRequestDelete:openConfirmationModal,onRequestDuplicate:onDuplicate,extensions,readOnly}),className:metadata_field_configurator_module_default.fieldAccordionItem,iconVariant:hasErrors?`alert-error`:void 0,children:accordionBody}),accordionItem=extensions.length>0?jsx(Tabs,{selectedId:activeTabId,setSelectedId:id=>setActiveTabId(id??`edit`),children:accordionItemEl}):accordionItemEl,content=jsxs(FieldConfiguratorContext.Provider,{value:effectiveContextValue,children:[jsx(`div`,{draggable:isDraggable&&!dndDragHandleProps,onDragStart:isDraggable&&!dndDragHandleProps&&onDragStart?e=>onDragStart(e,index):void 0,onDragEnd:isDraggable&&!dndDragHandleProps&&onDragEnd?e=>onDragEnd(e,index):void 0,onTouchStart:isDraggable&&!dndDragHandleProps&&onTouchStart?e=>onTouchStart(e,index):void 0,...isDraggable?dndDragHandleProps?.listeners??{}:{},...isDraggable?dndDragHandleProps?.attributes??{}:{},children:isExpanded===void 0?jsx(Accordion,{type:`single`,collapsible:!0,value:isActive?uniqueKey:``,onValueChange:handleAccordionValueChange,children:accordionItem}):accordionItem}),isDeleteConfirmationModalOpen&&jsx(ConfirmationModal,{onClose:closeConfirmationModal,onConfirm:handleDeleteField,title:intl.formatMessage(general.deleteFieldTitle,{fieldName:values.name}),body:intl.formatMessage(general.deleteFieldDescription)})]}),withTaxonomyContext=taxonomyOptions!==void 0||fetchTaxonomies!==void 0?jsx(TaxonomyOptionsContext.Provider,{value:taxonomyContextValue,children:content}):content;return fieldExtensionsProp===void 0?withTaxonomyContext:jsx(FieldExtensionsContext.Provider,{value:fieldExtensionsProp,children:withTaxonomyContext})};export{MetadataFieldConfigurator};
|
|
1
|
+
import{d as isUnsupportedField}from"../../../../chunks/types.js";import{general}from"./messages/configurator-messages.js";import ConfirmationModal from"./components/confirmation-modal/confirmation-modal.js";import{t as metadata_field_configurator_module_default}from"../../../../chunks/metadata-field-configurator.module.js";import{FieldActionSlot}from"./components/field-action-slot/field-action-slot.js";import{FieldConfiguratorContext}from"./context/field-configurator-context.js";import{TaxonomyOptionsContext}from"./context/taxonomy-options-context.js";import{FieldEditContent}from"./components/field-edit-content/field-edit-content.js";import{FieldExtensionsContext}from"./context/field-extensions-context.js";import{EDIT_TAB_ID,useFieldConfiguratorBehavior}from"./hooks/useFieldConfiguratorBehavior.js";import{Accordion,Tabs}from"@box/blueprint-web";import{useIntl}from"react-intl";import{Fragment,jsx,jsxs}from"react/jsx-runtime";import"react";var MetadataFieldConfigurator=({index,maxIndex,values,onValuesChange,onDelete,onDuplicate,onReorderFields,onTouchStart,onDragStart,onDragEnd,externalErrors,externalTouched,dndDragHandleProps,fieldCollapsedText,isExpanded,onExpandedChange,taxonomyOptions,fetchTaxonomies,submitAttemptCount,fieldExtensions:fieldExtensionsProp,onValidationChange,readOnly=!1})=>{let intl=useIntl(),{contextValue,taxonomyContextValue,extensions,isActive,handleAccordionValueChange,isDeleteConfirmationModalOpen,openConfirmationModal,closeConfirmationModal,handleDeleteField,activeTabId,setActiveTabId,isTypeEditable,uniqueKey,nameInputId,descriptionInputId,accordionTitle,TitleIcon,hasErrors,handleTypeChange,handleChangeVisibility}=useFieldConfiguratorBehavior({values,onValuesChange,onDelete,isExpanded,onExpandedChange,submitAttemptCount,taxonomyOptions,fetchTaxonomies,fieldExtensionsProp,onValidationChange}),effectiveContextValue=readOnly?{...contextValue,values:{...contextValue.values,isFieldReadOnly:!0}}:contextValue,editContent=jsx(FieldEditContent,{nameInputId,descriptionInputId,isTypeEditable,externalErrors,externalTouched,handleTypeChange,readOnly}),accordionBody=extensions.length>0?jsxs(Fragment,{children:[jsx(Tabs.TabPanel,{tabId:EDIT_TAB_ID,children:editContent}),extensions.map((ext,i)=>jsx(Tabs.TabPanel,{tabId:`ext-${i}`,className:metadata_field_configurator_module_default.extensionContent,children:ext.renderContent(values)},ext.label))]}):editContent,isUnsupported=isUnsupportedField(values),isDraggable=isExpanded===!1&&!isUnsupported,accordionItemEl=jsx(Accordion.Item,{highlighted:!0,startElement:jsx(TitleIcon,{fontSize:`20px`,role:`presentation`}),value:uniqueKey,title:accordionTitle,action:jsx(FieldActionSlot,{fieldCollapsedText,isHidden:values.hidden,isExpanded:isActive,index,maxIndex,onReorderFields:isUnsupported?void 0:onReorderFields,onToggleVisibility:isUnsupported?void 0:handleChangeVisibility,onRequestDelete:openConfirmationModal,onRequestDuplicate:isUnsupported?void 0:onDuplicate,extensions,readOnly}),className:metadata_field_configurator_module_default.fieldAccordionItem,iconVariant:hasErrors?`alert-error`:void 0,children:accordionBody}),accordionItem=extensions.length>0?jsx(Tabs,{selectedId:activeTabId,setSelectedId:id=>setActiveTabId(id??`edit`),children:accordionItemEl}):accordionItemEl,content=jsxs(FieldConfiguratorContext.Provider,{value:effectiveContextValue,children:[jsx(`div`,{draggable:isDraggable&&!dndDragHandleProps,onDragStart:isDraggable&&!dndDragHandleProps&&onDragStart?e=>onDragStart(e,index):void 0,onDragEnd:isDraggable&&!dndDragHandleProps&&onDragEnd?e=>onDragEnd(e,index):void 0,onTouchStart:isDraggable&&!dndDragHandleProps&&onTouchStart?e=>onTouchStart(e,index):void 0,...isDraggable?dndDragHandleProps?.listeners??{}:{},...isDraggable?dndDragHandleProps?.attributes??{}:{},children:isExpanded===void 0?jsx(Accordion,{type:`single`,collapsible:!0,value:isActive?uniqueKey:``,onValueChange:handleAccordionValueChange,children:accordionItem}):accordionItem}),isDeleteConfirmationModalOpen&&jsx(ConfirmationModal,{onClose:closeConfirmationModal,onConfirm:handleDeleteField,title:intl.formatMessage(general.deleteFieldTitle,{fieldName:values.name}),body:intl.formatMessage(general.deleteFieldDescription)})]}),withTaxonomyContext=taxonomyOptions!==void 0||fetchTaxonomies!==void 0?jsx(TaxonomyOptionsContext.Provider,{value:taxonomyContextValue,children:content}):content;return fieldExtensionsProp===void 0?withTaxonomyContext:jsx(FieldExtensionsContext.Provider,{value:fieldExtensionsProp,children:withTaxonomyContext})};export{MetadataFieldConfigurator};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{o as FieldType}from"../../../../chunks/types.js";import{t as DropdownFieldConfiguration}from"../../../../chunks/dropdown-field-configuration.js";import{t as TaxonomyFieldConfiguration}from"../../../../chunks/taxonomy-field-configuration.js";import{taxonomyDefaultValues}from"./components/type-specific-configuration/taxonomy/taxonomy-default-values.js";import{jsx}from"react/jsx-runtime";import"react";import uniqueId from"lodash/uniqueId";function createDefaultFieldValues(type){return{id:uniqueId(`field-`),key:``,hidden:!1,name:``,type:type??void 0,description:``,isFieldNew:!0,isFieldReadOnly:!1,...taxonomyDefaultValues,dropdown:{options:type===FieldType.Dropdown?[{id:uniqueId(),key:``,isNew:!0}]:[],allowMultipleSelections:!1,isAllowMultipleSelectionsEnabled:!0}}}var getConfigurationByType=type=>{switch(type){case FieldType.Dropdown:return jsx(DropdownFieldConfiguration,{});case FieldType.Taxonomy:return jsx(TaxonomyFieldConfiguration,{});default:return null}};function hasVisibleErrors(errors,touched){return errors?touched===!0?!0:typeof errors!=`object`||typeof touched!=`object`||!touched?!1:Object.keys(errors).some(key=>hasVisibleErrors(errors[key],touched[key])):!1}function markAllTouched(obj){return Object.keys(obj).reduce((acc,key)=>{let val=obj[key];return Array.isArray(val)?acc[key]=val.map(item=>typeof item==`object`&&item?markAllTouched(item):!0):typeof val==`object`&&val?acc[key]=markAllTouched(val):acc[key]=!0,acc},{})}export{createDefaultFieldValues,getConfigurationByType,hasVisibleErrors,markAllTouched};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{o as FieldType}from"../../../../chunks/types.js";import{Calendar,Numbers,Section,Taxonomy,TextInput}from"@box/blueprint-web-assets/icons/Medium";import{jsx}from"react/jsx-runtime";import"react";var FieldTypeIcon=type=>props=>{switch(type){case FieldType.Text:return jsx(TextInput,{...props});case FieldType.Number:return jsx(Numbers,{...props});case FieldType.Date:return jsx(Calendar,{...props});case FieldType.Dropdown:return jsx(Section,{...props});case FieldType.Taxonomy:return jsx(Taxonomy,{...props});default:return jsx(TextInput,{...props})}};export{FieldTypeIcon};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{r as CREATABLE_FIELD_TYPES}from"../../../../chunks/types.js";import{FieldTypeIcon}from"./field-type-icon.js";import{fieldTypeDescriptionMessages,fieldTypesTitleMessages}from"./messages.js";import{useEditorConfig}from"../../components/metadata-field-configurator/context/editor-config-context.js";import{useIntl}from"react-intl";import{useMemo}from"react";function useFieldOptions(){let intl=useIntl(),{disabledFieldTypes}=useEditorConfig();return{availableFieldTypes:useMemo(()=>CREATABLE_FIELD_TYPES.filter(type=>!disabledFieldTypes?.includes(type)).map(type=>({type,label:intl.formatMessage(fieldTypesTitleMessages[type]),description:intl.formatMessage(fieldTypeDescriptionMessages[type]),Icon:FieldTypeIcon(type)})),[intl,disabledFieldTypes])}}export{useFieldOptions};
|
package/dist/esm/lib/utils/template-type-conversion/convertLocalConfiguratorToTemplateField.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{l as TaxonomySelection,n as ApiMetadataTemplateFieldType,o as FieldType}from"../../../../chunks/types.js";import"../constants.js";import{generateKey}from"../key-generation.js";var resolveSelectableLevels=field=>{let{taxonomy}=field,levels=taxonomy.availableTaxonomies.find(availableTaxonomy=>availableTaxonomy.taxonomyKey===taxonomy.taxonomyKey)?.levels.map(level=>level.level)||[];return taxonomy.selection===TaxonomySelection.AllowAny?levels:taxonomy.selectedLevels||[]},convertLocalConfiguratorToTemplateField=(field,existingKeys=[])=>{let{name:displayName,description,hidden,type}=field,key=generateKey({displayName,existingKeys,defaultKey:`field`,maxKeyLength:256}),baseFieldData={key,displayName,description,hidden},result;switch(type){case FieldType.Text:result={...baseFieldData,type:ApiMetadataTemplateFieldType.String};break;case FieldType.Number:result={...baseFieldData,type:ApiMetadataTemplateFieldType.Float};break;case FieldType.Date:result={...baseFieldData,type:ApiMetadataTemplateFieldType.Date};break;case FieldType.Dropdown:result={...baseFieldData,type:field.dropdown.allowMultipleSelections?ApiMetadataTemplateFieldType.MultiSelect:ApiMetadataTemplateFieldType.Enum,options:field.dropdown.options.map(option=>({key:option.key}))};break;case FieldType.Taxonomy:result={...baseFieldData,type:ApiMetadataTemplateFieldType.Taxonomy,taxonomyKey:field.taxonomy.taxonomyKey,optionsRules:{selectableLevels:resolveSelectableLevels(field),multiSelect:field.taxonomy.allowMultipleSelections},namespace:field.taxonomy.namespace};break;case FieldType.Unsupported:default:throw Error(`Cannot create field with unsupported type: ${field.originalApiType||type}`)}return{field:result,updatedKeys:[...existingKeys,key]}};export{convertLocalConfiguratorToTemplateField,resolveSelectableLevels};
|
package/dist/esm/lib/utils/template-type-conversion/convertTemplateFieldToLocalConfigurator.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{l as TaxonomySelection,n as ApiMetadataTemplateFieldType,o as FieldType}from"../../../../chunks/types.js";import uniqueId from"lodash/uniqueId";var convertApiMetadataTemplateFieldToLocalConfiguratorField=(field,isReadOnly=!1)=>{let{key,displayName:name,description,type,hidden}=field,baseField={key,name,id:uniqueId(),description:description||``,hidden,dropdown:{allowMultipleSelections:!1,options:[],isAllowMultipleSelectionsEnabled:!1},taxonomy:{availableTaxonomies:[],allowMultipleSelections:!1,selection:TaxonomySelection.RequireSpecific,selectedLevels:[],taxonomySearchValue:``,taxonomyKey:``,namespace:``},isFieldNew:!1,isFieldReadOnly:isReadOnly};switch(type){case ApiMetadataTemplateFieldType.String:return{...baseField,type:FieldType.Text};case ApiMetadataTemplateFieldType.Float:return{...baseField,type:FieldType.Number};case ApiMetadataTemplateFieldType.Date:return{...baseField,type:FieldType.Date};case ApiMetadataTemplateFieldType.Enum:case ApiMetadataTemplateFieldType.MultiSelect:return{...baseField,type:FieldType.Dropdown,dropdown:{options:field.options?.map(option=>({id:uniqueId(),key:option.key,isNew:!1}))||[],allowMultipleSelections:type===ApiMetadataTemplateFieldType.MultiSelect,isAllowMultipleSelectionsEnabled:type===ApiMetadataTemplateFieldType.MultiSelect}};case ApiMetadataTemplateFieldType.Taxonomy:return{...baseField,type:FieldType.Taxonomy,taxonomy:{availableTaxonomies:[],allowMultipleSelections:field.optionsRules?.multiSelect||!1,selection:field.optionsRules?.selectableLevels?.length===1?TaxonomySelection.RequireSpecific:TaxonomySelection.AllowAny,selectedLevels:field.optionsRules?.selectableLevels||[],taxonomySearchValue:``,taxonomyKey:field.taxonomyKey||``,namespace:field.namespace||``}};default:return{...baseField,type:FieldType.Unsupported,originalApiType:type}}};export{convertApiMetadataTemplateFieldToLocalConfiguratorField};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{d as isUnsupportedField,n as ApiMetadataTemplateFieldType,o as FieldType,t as AllOps,u as TemplateOperations}from"../../../../chunks/types.js";import"../constants.js";import{generateKey}from"../key-generation.js";import{resolveSelectableLevels}from"./convertLocalConfiguratorToTemplateField.js";import isEqual from"lodash/isEqual";var configuratorFieldTypeToMetadataFieldTypeMap={[FieldType.Text]:ApiMetadataTemplateFieldType.String,[FieldType.Date]:ApiMetadataTemplateFieldType.Date,[FieldType.Number]:ApiMetadataTemplateFieldType.Float};function handleTemplateLevelChanges(initialTemplate,updatedTemplate){let patchItems=[],data={};return initialTemplate.displayName!==updatedTemplate.displayName&&(data.displayName=updatedTemplate.displayName),initialTemplate.hidden!==updatedTemplate.hidden&&(data.hidden=updatedTemplate.hidden),Object.keys(data).length>0&&patchItems.push({op:AllOps.EditTemplate,data}),patchItems}function handleFieldEdits(field,initialField,patchItems){if(!(isUnsupportedField(field)||isUnsupportedField(initialField))&&(field.description!==initialField.description||field.name!==initialField.name||field.hidden!==initialField.hidden)){let data={};field.name!==initialField.name&&(data.displayName=field.name),field.description!==initialField.description&&(data.description=field.description),field.hidden!==initialField.hidden&&(data.hidden=field.hidden),patchItems.push({op:AllOps.EditField,fieldKey:field.key,data})}}function handleDropdownOptionChanges(field,initialField,patchItems){if(field.type!==FieldType.Dropdown||initialField?.type!==FieldType.Dropdown)return;let isMultiSelect=field.dropdown.allowMultipleSelections,initialOptions=initialField.dropdown.options,updatedOptions=field.dropdown.options,initialOptionKeysMap=new Map(initialOptions.map(option=>[option.id,option])),updatedOptionKeysMap=new Map(updatedOptions.map(option=>[option.id,option]));initialOptions.forEach(option=>{if(!updatedOptionKeysMap.has(option.id)&&field.key){if(!option.key)throw Error(`optionKey is required`);patchItems.push({fieldKey:field.key,...isMultiSelect?{op:AllOps.RemoveMultiSelectOption,multiSelectOptionKey:option.key}:{op:AllOps.RemoveEnumOption,enumOptionKey:option.key}})}}),updatedOptions.forEach(option=>{let initialOption=initialOptionKeysMap.get(option.id);if(!initialOption)patchItems.push({op:isMultiSelect?AllOps.AddMultiSelectOption:AllOps.AddEnumOption,fieldKey:field.key,data:{key:option.key}});else if(initialOption.key!==option.key){if(!option.key)throw Error(`optionKey is required`);patchItems.push({fieldKey:field.key,...isMultiSelect?{op:AllOps.EditMultiSelectOption,multiSelectOptionKey:initialOption.key}:{op:AllOps.EditEnumOption,enumOptionKey:initialOption.key},data:{key:option.key}})}});let initialOptionOrder=initialOptions.map(option=>option.key),updatedOptionOrder=updatedOptions.map(option=>option.key);isEqual(initialOptionOrder,updatedOptionOrder)||patchItems.push({fieldKey:field.key,...isMultiSelect?{op:AllOps.ReorderMultiSelectOptions,multiSelectOptionKeys:updatedOptionOrder}:{op:AllOps.ReorderEnumOptions,enumOptionKeys:updatedOptionOrder}})}function buildApiFieldData(field,key){if(isUnsupportedField(field))throw Error(`Cannot create field with unsupported type: ${field.originalApiType||field.type}`);let baseData={displayName:field.name,hidden:field.hidden,key,description:field.description};return field.type===FieldType.Taxonomy?{...baseData,type:ApiMetadataTemplateFieldType.Taxonomy,taxonomyKey:field.taxonomy.taxonomyKey,optionsRules:{selectableLevels:resolveSelectableLevels(field),multiSelect:field.taxonomy.allowMultipleSelections},namespace:field.taxonomy.namespace}:field.type===FieldType.Dropdown?{...baseData,type:field.dropdown.allowMultipleSelections?ApiMetadataTemplateFieldType.MultiSelect:ApiMetadataTemplateFieldType.Enum,options:field.dropdown.options.map(option=>({key:option.key}))}:{...baseData,type:configuratorFieldTypeToMetadataFieldTypeMap[field.type]}}function handleNewField(field,knownKeys,patchItems){let uniqueKey=generateKey({displayName:field.name,existingKeys:Array.from(knownKeys),defaultKey:`field`,maxKeyLength:256});return knownKeys.add(uniqueKey),patchItems.push({op:AllOps.AddField,fieldKey:uniqueKey,data:buildApiFieldData(field,uniqueKey)}),{...field,key:uniqueKey}}function handleFieldChanges(initialFields,updatedFields){let initialFieldMap=new Map(initialFields.map(field=>[field.key,field])),knownKeys=new Set([...initialFields.map(f=>f.key),...updatedFields.map(f=>f.key)].filter(Boolean)),removePatchItems=[],updatedFieldKeySet=new Set(updatedFields.filter(f=>f.key).map(f=>f.key));initialFields.forEach(field=>{updatedFieldKeySet.has(field.key)||removePatchItems.push({op:AllOps.RemoveField,fieldKey:field.key})});let addEditPatchItems=[],resolvedFields=[];return updatedFields.forEach(field=>{let initialField=initialFieldMap.get(field.key);if(!initialField){resolvedFields.push(handleNewField(field,knownKeys,addEditPatchItems));return}resolvedFields.push(field),handleFieldEdits(field,initialField,addEditPatchItems),handleDropdownOptionChanges(field,initialField,addEditPatchItems)}),{patchItems:[...removePatchItems,...addEditPatchItems],resolvedFields}}function handleFieldReordering(initialFields,updatedFields){let initialFieldOrder=initialFields.map(field=>field.key).filter(Boolean),updatedFieldOrder=updatedFields.map(field=>field.key).filter(Boolean);return initialFieldOrder.length!==updatedFieldOrder.length||initialFieldOrder.some((key,i)=>key!==updatedFieldOrder[i])?[{op:AllOps.ReorderFields,fieldKeys:updatedFieldOrder}]:[]}function generateJSONPatchTemplateOperations(initialTemplate,updatedTemplate){let patchItems=[];patchItems.push(...handleTemplateLevelChanges(initialTemplate,updatedTemplate));let{patchItems:fieldPatchItems,resolvedFields}=handleFieldChanges(initialTemplate.fields||[],updatedTemplate.fields||[]);return patchItems.push(...fieldPatchItems),patchItems.push(...handleFieldReordering(initialTemplate.fields||[],resolvedFields)),patchItems}function generateJSONPatchTemplateOperationToUpdateTemplateName(displayName){return[{op:TemplateOperations.EditTemplate,data:{displayName}}]}export{configuratorFieldTypeToMetadataFieldTypeMap,generateJSONPatchTemplateOperationToUpdateTemplateName,generateJSONPatchTemplateOperations};
|
package/dist/types/lib/components/metadata-field-configurator/hooks/useTemplateFieldSchema.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ import * as Yup from 'yup';
|
|
|
9
9
|
*/
|
|
10
10
|
export declare const useTemplateFieldSchema: () => Yup.Lazy<{
|
|
11
11
|
description?: string | null | undefined;
|
|
12
|
+
originalApiType?: string | null | undefined;
|
|
12
13
|
name: string;
|
|
13
14
|
type: NonNullable<FieldType | undefined>;
|
|
14
15
|
hidden: NonNullable<boolean | undefined>;
|
package/dist/types/lib/components/metadata-field-configurator/messages/configurator-messages.d.ts
CHANGED
|
@@ -129,6 +129,16 @@ export declare const general: {
|
|
|
129
129
|
description: string;
|
|
130
130
|
id: string;
|
|
131
131
|
};
|
|
132
|
+
unsupportedFieldNotice: {
|
|
133
|
+
defaultMessage: string;
|
|
134
|
+
description: string;
|
|
135
|
+
id: string;
|
|
136
|
+
};
|
|
137
|
+
unsupportedFieldsBanner: {
|
|
138
|
+
defaultMessage: string;
|
|
139
|
+
description: string;
|
|
140
|
+
id: string;
|
|
141
|
+
};
|
|
132
142
|
};
|
|
133
143
|
export declare const validationErrors: {
|
|
134
144
|
fieldNameCannotBeEmpty: {
|
|
@@ -4,6 +4,7 @@ export declare const useMetadataTemplateFormSchema: () => Yup.ObjectSchema<{
|
|
|
4
4
|
templateKey: Yup.Maybe<string | undefined>;
|
|
5
5
|
fields: Yup.Maybe<{
|
|
6
6
|
description?: string | null | undefined;
|
|
7
|
+
originalApiType?: string | null | undefined;
|
|
7
8
|
name: string;
|
|
8
9
|
type: NonNullable<import('../types').FieldType | undefined>;
|
|
9
10
|
hidden: NonNullable<boolean | undefined>;
|
|
@@ -14,14 +14,20 @@ export declare enum MetadataTemplateEditorMode {
|
|
|
14
14
|
* - Date - date field
|
|
15
15
|
* - Dropdown - field with a dropdown list
|
|
16
16
|
* - Taxonomy - taxonomy field (e.g. key-value pairs)
|
|
17
|
+
* - Unsupported - deprecated/unknown API type (read-only; delete only; cannot be created)
|
|
17
18
|
*/
|
|
18
19
|
export declare enum FieldType {
|
|
19
20
|
Text = "text",
|
|
20
21
|
Number = "number",
|
|
21
22
|
Date = "date",
|
|
22
23
|
Dropdown = "dropdown",
|
|
23
|
-
Taxonomy = "taxonomy"
|
|
24
|
+
Taxonomy = "taxonomy",
|
|
25
|
+
Unsupported = "unsupported"
|
|
24
26
|
}
|
|
27
|
+
/** Field types that can be created via the type picker (excludes Unsupported). */
|
|
28
|
+
export type CreatableFieldType = Exclude<FieldType, FieldType.Unsupported>;
|
|
29
|
+
/** Field types that can be created via the type picker. */
|
|
30
|
+
export declare const CREATABLE_FIELD_TYPES: CreatableFieldType[];
|
|
25
31
|
/**
|
|
26
32
|
* Basic set of properties for every field.
|
|
27
33
|
*/
|
|
@@ -41,17 +47,28 @@ export interface BasicField {
|
|
|
41
47
|
taxonomy: TaxonomyField['taxonomy'];
|
|
42
48
|
isFieldNew: boolean;
|
|
43
49
|
isFieldReadOnly: boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Original API field type when `type` is `Unsupported` (e.g. `timeline`, `integer`).
|
|
52
|
+
* Preserved so save never rewrites the type.
|
|
53
|
+
*/
|
|
54
|
+
originalApiType?: string;
|
|
44
55
|
}
|
|
45
56
|
/**
|
|
46
57
|
* Describes possible data for any field. It branches based on the `type` property.
|
|
58
|
+
* Unsupported is a separate variant so type guards can narrow it away cleanly.
|
|
47
59
|
*/
|
|
48
60
|
export type FieldData = (BasicField & {
|
|
49
61
|
type: FieldType.Text | FieldType.Number | FieldType.Date;
|
|
62
|
+
}) | (BasicField & {
|
|
63
|
+
type: FieldType.Unsupported;
|
|
50
64
|
}) | (BasicField & DropdownField & {
|
|
51
65
|
type: FieldType.Dropdown;
|
|
52
66
|
}) | (BasicField & TaxonomyField & {
|
|
53
67
|
type: FieldType.Taxonomy;
|
|
54
68
|
});
|
|
69
|
+
export declare const isUnsupportedField: (field: Pick<BasicField, "type">) => field is Pick<BasicField, "type"> & {
|
|
70
|
+
type: FieldType.Unsupported;
|
|
71
|
+
};
|
|
55
72
|
/**
|
|
56
73
|
* Represents a dropdown field with a non-empty array of options.
|
|
57
74
|
*/
|
|
@@ -151,7 +168,23 @@ export type ApiMetadataTemplateDropdownField = {
|
|
|
151
168
|
type: ApiMetadataTemplateFieldType.Enum | ApiMetadataTemplateFieldType.MultiSelect;
|
|
152
169
|
options: ApiDropdownFieldOption[];
|
|
153
170
|
};
|
|
154
|
-
export type
|
|
171
|
+
export type ApiMetadataTemplateKnownField = ApiMetadataTemplateFieldBase & (ApiMetadataTemplateTextField | ApiMetadataTemplateNumberField | ApiMetadataTemplateDateField | ApiMetadataTemplateTaxonomyField | ApiMetadataTemplateDropdownField);
|
|
172
|
+
/**
|
|
173
|
+
* Field shape from the API when loading a template for edit.
|
|
174
|
+
* `type` is a string so deprecated/unknown types (e.g. timeline, integer) are accepted.
|
|
175
|
+
*/
|
|
176
|
+
export type ApiMetadataTemplateFieldFromApi = ApiMetadataTemplateFieldBase & {
|
|
177
|
+
type: string;
|
|
178
|
+
options?: ApiDropdownFieldOption[];
|
|
179
|
+
optionsRules?: {
|
|
180
|
+
selectableLevels: number[];
|
|
181
|
+
multiSelect: boolean;
|
|
182
|
+
};
|
|
183
|
+
taxonomyKey?: string;
|
|
184
|
+
namespace?: string;
|
|
185
|
+
};
|
|
186
|
+
/** Known or unknown API field — used when reading templates that may contain deprecated types. */
|
|
187
|
+
export type ApiMetadataTemplateField = ApiMetadataTemplateKnownField | ApiMetadataTemplateFieldFromApi;
|
|
155
188
|
type MetadataTemplateBase = {
|
|
156
189
|
namespace: string;
|
|
157
190
|
templateKey: string;
|
|
@@ -176,8 +209,9 @@ export type MetadataTemplateEditorFormValues = MetadataTemplateBase & {
|
|
|
176
209
|
/**
|
|
177
210
|
* A template field as expected by create (POST) and AddField patch payloads.
|
|
178
211
|
* Same visibility property (`hidden`) as the GET response field shape.
|
|
212
|
+
* Unsupported/deprecated API types cannot be created.
|
|
179
213
|
*/
|
|
180
|
-
export type MetadataTemplateFieldCreateBody =
|
|
214
|
+
export type MetadataTemplateFieldCreateBody = ApiMetadataTemplateKnownField;
|
|
181
215
|
/**
|
|
182
216
|
* The full request body sent to the create (POST) endpoint.
|
|
183
217
|
*/
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CreatableFieldType } from '../../types';
|
|
2
2
|
/**
|
|
3
3
|
* Represents the structure of a field type for displaying in the field picker.
|
|
4
4
|
*/
|
|
5
5
|
export type FieldOptionType = {
|
|
6
6
|
/** The type of the field (e.g., "text", "number", etc.) */
|
|
7
|
-
type:
|
|
7
|
+
type: CreatableFieldType;
|
|
8
8
|
/** The localized label for the field type */
|
|
9
9
|
label: string;
|
|
10
10
|
/** The localized description for the field type */
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@box/metadata-template-editor",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.27",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE",
|
|
5
5
|
"peerDependencies": {
|
|
6
|
-
"@box/blueprint-web": "^16.20.
|
|
7
|
-
"@box/blueprint-web-assets": "^5.7.
|
|
6
|
+
"@box/blueprint-web": "^16.20.7",
|
|
7
|
+
"@box/blueprint-web-assets": "^5.7.14",
|
|
8
8
|
"@dnd-kit/core": "^6.1.0",
|
|
9
9
|
"@dnd-kit/sortable": "^8.0.0",
|
|
10
10
|
"@dnd-kit/utilities": "^3.2.2",
|
|
@@ -17,10 +17,10 @@
|
|
|
17
17
|
"yup": "^1.6.1"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
|
-
"@box/blueprint-web": "^16.20.
|
|
21
|
-
"@box/blueprint-web-assets": "^5.7.
|
|
20
|
+
"@box/blueprint-web": "^16.20.7",
|
|
21
|
+
"@box/blueprint-web-assets": "^5.7.14",
|
|
22
22
|
"@box/eslint-plugin-blueprint": "2.2.8",
|
|
23
|
-
"@box/storybook-utils": "1.2.
|
|
23
|
+
"@box/storybook-utils": "1.2.23",
|
|
24
24
|
"@dnd-kit/core": "^6.1.0",
|
|
25
25
|
"@dnd-kit/sortable": "^8.0.0",
|
|
26
26
|
"@dnd-kit/utilities": "^3.2.2",
|