sanity-plugin-internationalized-array 1.10.7 → 1.10.8
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/lib/index.esm.js +4 -9
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +3 -8
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
- package/src/plugin.tsx +5 -5
package/lib/index.js
CHANGED
|
@@ -9468,12 +9468,12 @@ if(freeModule){// Export for Node.js.
|
|
|
9468
9468
|
(freeModule.exports=_)._=_;// Export for CommonJS support.
|
|
9469
9469
|
freeExports._=_;}else{// Export to the global object.
|
|
9470
9470
|
root._=_;}}).call(commonjsGlobal);})(lodash,lodash.exports);var lodashExports=lodash.exports;const getSelectedValue=(select,document)=>{if(!select||!document){return{};}const selection=select||{};const selectedValue={};for(const[key,path]of Object.entries(selection)){let value=lodashExports.get(document,path);if(Array.isArray(value)){value=value.filter(item=>typeof item==="object"?(item==null?void 0:item._type)==="reference"&&"_ref"in item:true);}selectedValue[key]=value;}return selectedValue;};const InternationalizedArrayContext=react.createContext({...CONFIG_DEFAULT,languages:[],filteredLanguages:[]});function useInternationalizedArrayContext(){return react.useContext(InternationalizedArrayContext);}function InternationalizedArrayProvider(props){const{internationalizedArray}=props;const client=sanity.useClient({apiVersion:internationalizedArray.apiVersion});const{value:document}=sanity.useFormBuilder();const deferredDocument=react.useDeferredValue(document);const selectedValue=react.useMemo(()=>getSelectedValue(internationalizedArray.select,deferredDocument),[internationalizedArray.select,deferredDocument]);const languages=Array.isArray(internationalizedArray.languages)?internationalizedArray.languages:suspend.suspend(// eslint-disable-next-line require-await
|
|
9471
|
-
async()=>{if(typeof internationalizedArray.languages==="function"){return internationalizedArray.languages(client,selectedValue);}return internationalizedArray.languages;},[version,namespace,selectedValue],{equal:equal__default.default});const{selectedLanguageIds,options:languageFilterOptions}=languageFilter.useLanguageFilterStudioContext();const filteredLanguages=react.useMemo(()=>{const documentType=deferredDocument?deferredDocument._type:void 0;const languageFilterEnabled=typeof documentType==="string"&&languageFilterOptions.documentTypes.includes(documentType);return languageFilterEnabled?languages.filter(language=>selectedLanguageIds.includes(language.id)):languages;},[deferredDocument,languageFilterOptions,languages,selectedLanguageIds]);const showDocumentButtons=internationalizedArray.buttonLocations.includes("document");return/* @__PURE__ */jsxRuntime.jsx(InternationalizedArrayContext.Provider,{value:{...internationalizedArray,languages,filteredLanguages},children:showDocumentButtons?/* @__PURE__ */jsxRuntime.jsxs(ui.Stack,{space:5,children:[/* @__PURE__ */jsxRuntime.jsx(DocumentAddButtons,{schemaType:props.schemaType,value:props.value}),props.renderDefault(props)]}):props.renderDefault(props)});}var Preload=react.memo(function Preload(props){const client=sanity.useClient({apiVersion:props.apiVersion});if(!Array.isArray(peek({}))){preload(async()=>Array.isArray(props.languages)?props.languages:props.languages(client,{}));}return null;});function
|
|
9471
|
+
async()=>{if(typeof internationalizedArray.languages==="function"){return internationalizedArray.languages(client,selectedValue);}return internationalizedArray.languages;},[version,namespace,selectedValue],{equal:equal__default.default});const{selectedLanguageIds,options:languageFilterOptions}=languageFilter.useLanguageFilterStudioContext();const filteredLanguages=react.useMemo(()=>{const documentType=deferredDocument?deferredDocument._type:void 0;const languageFilterEnabled=typeof documentType==="string"&&languageFilterOptions.documentTypes.includes(documentType);return languageFilterEnabled?languages.filter(language=>selectedLanguageIds.includes(language.id)):languages;},[deferredDocument,languageFilterOptions,languages,selectedLanguageIds]);const showDocumentButtons=internationalizedArray.buttonLocations.includes("document");return/* @__PURE__ */jsxRuntime.jsx(InternationalizedArrayContext.Provider,{value:{...internationalizedArray,languages,filteredLanguages},children:showDocumentButtons?/* @__PURE__ */jsxRuntime.jsxs(ui.Stack,{space:5,children:[/* @__PURE__ */jsxRuntime.jsx(DocumentAddButtons,{schemaType:props.schemaType,value:props.value}),props.renderDefault(props)]}):props.renderDefault(props)});}var Preload=react.memo(function Preload(props){const client=sanity.useClient({apiVersion:props.apiVersion});if(!Array.isArray(peek({}))){preload(async()=>Array.isArray(props.languages)?props.languages:props.languages(client,{}));}return null;});function checkAllLanguagesArePresent(languages,value){const filteredLanguageIds=languages.map(l=>l.id);const languagesInUseIds=value?value.map(v=>v._key):[];return languagesInUseIds.length===filteredLanguageIds.length&&languagesInUseIds.every(l=>filteredLanguageIds.includes(l));}function createAddAllTitle(value,languages){if(value==null?void 0:value.length){return"Add missing ".concat(languages.length-value.length===1?"language":"languages");}return languages.length===1?"Add ".concat(languages[0].title," Field"):"Add all languages";}function createAddLanguagePatches(config){const{addLanguageKeys,schemaType,languages,filteredLanguages,value,path=[]}=config;const itemBase={_type:createValueSchemaTypeName(schemaType)};const newItems=Array.isArray(addLanguageKeys)&&addLanguageKeys.length>0?// Just one for this language
|
|
9472
9472
|
addLanguageKeys.map(id=>({...itemBase,_key:id})):// Or one for every missing language
|
|
9473
9473
|
filteredLanguages.filter(language=>(value==null?void 0:value.length)?!value.find(v=>v._key===language.id):true).map(language=>({...itemBase,_key:language.id}));const languagesInUse=(value==null?void 0:value.length)?value.map(v=>v):[];const insertions=newItems.map(item=>{const languageIndex=languages.findIndex(l=>item._key===l.id);const remainingLanguages=languages.slice(languageIndex+1);const nextLanguageIndex=languagesInUse.findIndex(l=>// eslint-disable-next-line max-nested-callbacks
|
|
9474
9474
|
remainingLanguages.find(r=>r.id===l._key));if(nextLanguageIndex<0){languagesInUse.push(item);}else{languagesInUse.splice(nextLanguageIndex,0,item);}return nextLanguageIndex<0?// No next language (-1), add to end of array
|
|
9475
9475
|
sanity.insert([item],"after",[...path,nextLanguageIndex]):// Next language found, insert before that
|
|
9476
|
-
sanity.insert([item],"before",[...path,nextLanguageIndex]);});return insertions;}const schemaExample={languages:[{id:"en",title:"English"},{id:"no",title:"Norsk"}]};function Feedback(){return/* @__PURE__ */jsxRuntime.jsx(ui.Card,{tone:"caution",border:true,radius:2,padding:3,children:/* @__PURE__ */jsxRuntime.jsxs(ui.Stack,{space:4,children:[/* @__PURE__ */jsxRuntime.jsxs(ui.Text,{children:["An array of language objects must be passed into the"," ",/* @__PURE__ */jsxRuntime.jsx("code",{children:"internationalizedArray"})," helper function, each with an"," ",/* @__PURE__ */jsxRuntime.jsx("code",{children:"id"})," and ",/* @__PURE__ */jsxRuntime.jsx("code",{children:"title"})," field. Example:"]}),/* @__PURE__ */jsxRuntime.jsx(ui.Card,{padding:2,border:true,radius:2,children:/* @__PURE__ */jsxRuntime.jsx(ui.Code,{size:1,language:"javascript",children:JSON.stringify(schemaExample,null,2)})})]})});}function InternationalizedArray(props){const{members,value,schemaType,onChange}=props;const readOnly=typeof schemaType.readOnly==="boolean"?schemaType.readOnly:false;const toast=ui.useToast();const{languages,filteredLanguages,defaultLanguages,buttonAddAll,buttonLocations}=useInternationalizedArrayContext();const{selectedLanguageIds,options:languageFilterOptions}=languageFilter.useLanguageFilterStudioContext();const documentType=sanity.useFormValue(["_type"]);const languageFilterEnabled=typeof documentType==="string"&&languageFilterOptions.documentTypes.includes(documentType);const filteredMembers=react.useMemo(()=>languageFilterEnabled?members.filter(member=>{if(member.kind!=="item"){return false;}const valueMember=member.item.members[0];if(valueMember.kind!=="field"){return false;}return languageFilterOptions.filterField(member.item.schemaType,valueMember,selectedLanguageIds);}):members,[languageFilterEnabled,members,languageFilterOptions,selectedLanguageIds]);const handleAddLanguage=react.useCallback(param=>{var _a;if(!(filteredLanguages==null?void 0:filteredLanguages.length)){return;}const addLanguageKeys=Array.isArray(param)?param:[(_a=param==null?void 0:param.currentTarget)==null?void 0:_a.value].filter(Boolean);const patches=createAddLanguagePatches({addLanguageKeys,schemaType,languages,filteredLanguages,value});onChange([sanity.setIfMissing([]),...patches]);},[filteredLanguages,languages,onChange,schemaType,value]);const documentCreatedAt=sanity.useFormValue(["_createdAt"]);const[hasAddedDefaultLanguages,setHasAddedDefaultLanguages]=react.useState(Boolean(documentCreatedAt));react.useEffect(()=>{if(// Hasn't already added default languages
|
|
9476
|
+
sanity.insert([item],"before",[...path,nextLanguageIndex]);});return insertions;}const createTranslateFieldActions=(fieldActionProps,_ref)=>{let{languages,filteredLanguages}=_ref;return languages.map(language=>{const value=sanity.useFormValue(fieldActionProps.path);const disabled=value&&Array.isArray(value)?Boolean(value==null?void 0:value.find(item=>item._key===language.id)):false;const hidden=!filteredLanguages.some(f=>f.id===language.id);const{onChange}=desk.useDocumentPane();const onAction=react.useCallback(()=>{const{schemaType,path}=fieldActionProps;const addLanguageKeys=[language.id];const patches=createAddLanguagePatches({addLanguageKeys,schemaType,languages,filteredLanguages,value,path});onChange(sanity.PatchEvent.from([sanity.setIfMissing([],path),...patches]));},[language.id,value,onChange]);return{type:"action",icon:icons.AddIcon,onAction,title:language.title,hidden,disabled};});};const AddMissingTranslationsFieldAction=(fieldActionProps,_ref2)=>{let{languages,filteredLanguages}=_ref2;const value=sanity.useFormValue(fieldActionProps.path);const disabled=value&&value.length===filteredLanguages.length;const hidden=checkAllLanguagesArePresent(filteredLanguages,value);const{onChange}=desk.useDocumentPane();const onAction=react.useCallback(()=>{const{schemaType,path}=fieldActionProps;const addLanguageKeys=[];const patches=createAddLanguagePatches({addLanguageKeys,schemaType,languages,filteredLanguages,value,path});onChange(sanity.PatchEvent.from([sanity.setIfMissing([],path),...patches]));},[fieldActionProps,filteredLanguages,languages,onChange,value]);return{type:"action",icon:icons.AddIcon,onAction,title:createAddAllTitle(value,filteredLanguages),disabled,hidden};};const internationalizedArrayFieldAction=sanity.defineDocumentFieldAction({name:"internationalizedArray",useAction(fieldActionProps){var _a,_b;const isInternationalizedArrayField=(_b=(_a=fieldActionProps==null?void 0:fieldActionProps.schemaType)==null?void 0:_a.type)==null?void 0:_b.name.startsWith("internationalizedArray");const{languages,filteredLanguages}=useInternationalizedArrayContext();const translateFieldActions=createTranslateFieldActions(fieldActionProps,{languages,filteredLanguages});return{type:"group",icon:icons.TranslateIcon,title:"Add Translation",renderAsButton:true,children:isInternationalizedArrayField?[...translateFieldActions,AddMissingTranslationsFieldAction(fieldActionProps,{languages,filteredLanguages})]:[],hidden:!isInternationalizedArrayField};}});function camelCase(string){return string.replace(/-([a-z])/g,g=>g[1].toUpperCase());}function titleCase(string){return string.split(" ").map(word=>word.charAt(0).toUpperCase()+word.slice(1)).join(" ");}function pascalCase(string){return titleCase(camelCase(string));}function createFieldName(name){let addValue=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;return addValue?["internationalizedArray",pascalCase(name),"Value"].join(""):["internationalizedArray",pascalCase(name)].join("");}const schemaExample={languages:[{id:"en",title:"English"},{id:"no",title:"Norsk"}]};function Feedback(){return/* @__PURE__ */jsxRuntime.jsx(ui.Card,{tone:"caution",border:true,radius:2,padding:3,children:/* @__PURE__ */jsxRuntime.jsxs(ui.Stack,{space:4,children:[/* @__PURE__ */jsxRuntime.jsxs(ui.Text,{children:["An array of language objects must be passed into the"," ",/* @__PURE__ */jsxRuntime.jsx("code",{children:"internationalizedArray"})," helper function, each with an"," ",/* @__PURE__ */jsxRuntime.jsx("code",{children:"id"})," and ",/* @__PURE__ */jsxRuntime.jsx("code",{children:"title"})," field. Example:"]}),/* @__PURE__ */jsxRuntime.jsx(ui.Card,{padding:2,border:true,radius:2,children:/* @__PURE__ */jsxRuntime.jsx(ui.Code,{size:1,language:"javascript",children:JSON.stringify(schemaExample,null,2)})})]})});}function InternationalizedArray(props){const{members,value,schemaType,onChange}=props;const readOnly=typeof schemaType.readOnly==="boolean"?schemaType.readOnly:false;const toast=ui.useToast();const{languages,filteredLanguages,defaultLanguages,buttonAddAll,buttonLocations}=useInternationalizedArrayContext();const{selectedLanguageIds,options:languageFilterOptions}=languageFilter.useLanguageFilterStudioContext();const documentType=sanity.useFormValue(["_type"]);const languageFilterEnabled=typeof documentType==="string"&&languageFilterOptions.documentTypes.includes(documentType);const filteredMembers=react.useMemo(()=>languageFilterEnabled?members.filter(member=>{if(member.kind!=="item"){return false;}const valueMember=member.item.members[0];if(valueMember.kind!=="field"){return false;}return languageFilterOptions.filterField(member.item.schemaType,valueMember,selectedLanguageIds);}):members,[languageFilterEnabled,members,languageFilterOptions,selectedLanguageIds]);const handleAddLanguage=react.useCallback(param=>{var _a;if(!(filteredLanguages==null?void 0:filteredLanguages.length)){return;}const addLanguageKeys=Array.isArray(param)?param:[(_a=param==null?void 0:param.currentTarget)==null?void 0:_a.value].filter(Boolean);const patches=createAddLanguagePatches({addLanguageKeys,schemaType,languages,filteredLanguages,value});onChange([sanity.setIfMissing([]),...patches]);},[filteredLanguages,languages,onChange,schemaType,value]);const documentCreatedAt=sanity.useFormValue(["_createdAt"]);const[hasAddedDefaultLanguages,setHasAddedDefaultLanguages]=react.useState(Boolean(documentCreatedAt));react.useEffect(()=>{if(// Hasn't already added default languages
|
|
9477
9477
|
// (This prevents the document being recreated when deleted)
|
|
9478
9478
|
!hasAddedDefaultLanguages&&// This array field is empty
|
|
9479
9479
|
!value&&// Document form is in "not yet created" state
|
|
@@ -9497,12 +9497,7 @@ field:InternationalizedField}}):// Pass in the configured options, but overwrite
|
|
|
9497
9497
|
// @ts-expect-error
|
|
9498
9498
|
field.type.of[0].fields,[...path,field.name],maxDepth);return[...acc,thisFieldWithPath,...innerFields];}return[...acc,thisFieldWithPath];},[]);}const internationalizedArray=sanity.definePlugin(config=>{const pluginConfig={...CONFIG_DEFAULT,...config};const{apiVersion="2022-11-27",select,languages,fieldTypes,defaultLanguages,buttonLocations}=pluginConfig;return{name:"sanity-plugin-internationalized-array",// Preload languages for use throughout the Studio
|
|
9499
9499
|
studio:Array.isArray(languages)?void 0:{components:{layout:props=>/* @__PURE__ */jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[/* @__PURE__ */jsxRuntime.jsx(Preload,{apiVersion,languages}),props.renderDefault(props)]})}},// Optional: render "add language" buttons as field actions
|
|
9500
|
-
|
|
9501
|
-
// unstable_fieldActions: buttonLocations.includes('unstable__fieldAction')
|
|
9502
|
-
// ? (prev) => [...prev, internationalizedArrayFieldAction]
|
|
9503
|
-
// : undefined,
|
|
9504
|
-
// },
|
|
9505
|
-
// Wrap document editor with a language provider
|
|
9500
|
+
document:{unstable_fieldActions:buttonLocations.includes("unstable__fieldAction")?prev=>[...prev,internationalizedArrayFieldAction]:void 0},// Wrap document editor with a language provider
|
|
9506
9501
|
form:{components:{input:props=>{const isRootInput=props.id==="root"&&sanity.isObjectInputProps(props);if(!isRootInput){return props.renderDefault(props);}const flatFieldTypeNames=flattenSchemaType(props.schemaType).map(field=>field.type.name);const hasInternationalizedArray=flatFieldTypeNames.some(name=>name.startsWith("internationalizedArray"));if(!hasInternationalizedArray){return props.renderDefault(props);}return InternationalizedArrayProvider({...props,internationalizedArray:pluginConfig});}}},// Register custom schema types for the outer array and the inner object
|
|
9507
9502
|
schema:{types:[...fieldTypes.map(type=>array({type,apiVersion,select,languages,defaultLanguages})),...fieldTypes.map(type=>object({type}))]}};});exports.clear=clear;exports.internationalizedArray=internationalizedArray;
|
|
9508
9503
|
//# sourceMappingURL=index.js.map
|