@sanity/language-filter 3.2.0 → 3.2.1

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 CHANGED
@@ -1 +1 @@
1
- var e;const t=["members","schemaType","renderDefault"];function n(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}import{jsx as l,jsxs as a,Fragment as s}from"react/jsx-runtime";import{useClient as u,useFormValue as c,TextWithTone as d,definePlugin as g,isObjectSchemaType as p}from"sanity";import{useState as f,createContext as m,useEffect as y,useMemo as h,useContext as b,useCallback as v}from"react";import{Box as L,useClickOutside as O,Stack as j,Card as S,Button as w,Flex as T,Text as P,TextInput as x,Popover as A,Badge as D}from"@sanity/ui";import I from"styled-components";import{EyeClosedIcon as k,EyeOpenIcon as C,TranslateIcon as N,CheckmarkCircleIcon as F,CircleIcon as z}from"@sanity/icons";const E=(e,t,n)=>!e.name.startsWith("locale")||n.includes(t.name);function J(e,t){var n,r;const o=function(e){return"object"===(null==e?void 0:e.jsonType)&&"document"===V(e).name}(e)&&(null==(n=null==e?void 0:e.options)?void 0:n.languageFilter),i=!t.documentTypes;return!!(i&&!1!==o||!i&&o||e&&(null==(r=t.documentTypes)?void 0:r.includes(e.name)))}function V(e){return e.type?V(e.type):e}const _="@sanity/plugin/language-filter/selected-languages";function H(e){const t=W(e).map((e=>e.id));let n=t;try{const e=window.localStorage.getItem(_);e&&(n=JSON.parse(e))}catch(e){}var r;return r=t,n=n.filter((e=>r.includes(e))),n}function W(e){let{supportedLanguages:t,defaultLanguages:n}=e;return Array.isArray(t)?t.filter((e=>!(null==n?void 0:n.includes(e.id)))):[]}const q={options:{apiVersion:"2022-11-27",supportedLanguages:[],defaultLanguages:[],documentTypes:[],filterField:E},selectedLanguageIds:[],setSelectedLanguageIds:()=>console.error("LanguageFilterStudioContext not initialized")},B=m(q);function G(e){const t=u({apiVersion:"2023-01-01"}),[n,r]=f(Array.isArray(e.options.supportedLanguages)?e.options.supportedLanguages:[]);y((()=>{let n=[];Array.isArray(e.options.supportedLanguages)||async function(e){n=await e(t,{}),r(n)}(e.options.supportedLanguages)}),[t,e.options.supportedLanguages]);const i=h((()=>o(o(o({},q.options),e.options),{},{supportedLanguages:n})),[e.options,n]),[a,s]=function(e){return f((()=>{var t;return[...null!=(t=e.defaultLanguages)?t:[],...H(e)]}))}(i);return l(B.Provider,{value:{options:i,selectedLanguageIds:a,setSelectedLanguageIds:s},children:e.renderDefault(e)})}function K(){return b(B)}function M(e){const{members:r,schemaType:i,renderDefault:l}=e,a=n(e,t),{selectedLanguageIds:s,options:u}=K(),{filterField:c}=u,d=h((()=>r.filter((e=>"field"===e.kind&&c(i,e,s)||"fieldSet"===e.kind)).map((e=>"fieldSet"===e.kind?o(o({},e),{},{fieldSet:o(o({},e.fieldSet),{},{members:e.fieldSet.members.filter((e=>"field"===e.kind&&c(i,e,s)))})}):e))),[i,r,c,s]);return l(o(o({},a),{},{members:d,schemaType:i,renderDefault:l}))}const Q=e=>Array.from(new Set(e));function R(){const{selectedLanguageIds:e,setSelectedLanguageIds:t,options:n}=K(),{defaultLanguages:r=[]}=n,o=h((()=>W(n)),[n]),i=v((e=>{var n;t(Q([...r,...e])),n=Q([...r,...e]),window.localStorage.setItem(_,JSON.stringify(n))}),[r,t]),l=v((()=>i(o.map((e=>e.id)))),[i,o]),a=v((()=>{i(r)}),[r,i]),s=v((t=>{let n=e;n=n.includes(t)?n.filter((e=>e!==t)):Q([...n,t]),i(n)}),[i,e]);return{activeLanguages:h((()=>Q([...null!=r?r:[],...e])),[r,e]),allSelected:e.length===o.length+r.length,selectAll:l,selectNone:a,toggleLanguage:s}}const U=I(L)(e||(X=["\n max-height: calc(100vh - 200px);\n"],Y||(Y=X.slice(0)),e=Object.freeze(Object.defineProperties(X,{raw:{value:Object.freeze(Y)}}))));var X,Y;function Z(){const{options:e}=K(),t=e.supportedLanguages.filter((t=>{var n;return null==(n=e.defaultLanguages)?void 0:n.includes(t.id)})),n=e.supportedLanguages.filter((t=>{var n;return!(null==(n=e.defaultLanguages)?void 0:n.includes(t.id))})),[r,o]=f(!1),{activeLanguages:i,allSelected:u,selectAll:c,selectNone:g,toggleLanguage:p}=R(),[m,y]=f(null),[h,b]=f(null),D=v((e=>{"ALL"===e.currentTarget.value?c():g()}),[c,g]),I=v((()=>o((e=>!e))),[]),F=v((()=>o(!1)),[]);O(F,[m,h]);const z=e.supportedLanguages.length,[E,J]=f(""),V=v((e=>{e.currentTarget.value?J(e.currentTarget.value):J("")}),[]),_=z>4,H=l(U,{overflow:"auto",children:a(j,{padding:1,space:1,children:[t.length>0&&a(s,{children:[t.map((e=>l($,{id:e.id,title:e.title,selected:!0},e.id))),l(S,{borderTop:!0})]}),l(w,{mode:"bleed",onClick:D,justify:"flex-start",value:u?"NONE":"ALL",disabled:!!E,children:a(T,{gap:3,align:"center",children:[l(P,{size:2,children:u?l(d,{tone:"primary",children:l(k,{})}):l(C,{})}),l(L,{flex:1,children:l(P,{children:u?"Hide all":"Show all"})})]})}),_?l(x,{onChange:V,value:E,placeholder:"Filter languages"}):l(S,{borderTop:!0}),n.filter((e=>!E||e.title.toLowerCase().includes(E.toLowerCase()))).map((e=>l($,{id:e.id,onToggle:p,selected:i.includes(e.id),title:e.title},e.id)))]})}),W=i.length===z?"Showing all":"Showing ".concat(i.length," / ").concat(z);return l(A,{content:H,open:r,portal:!0,ref:b,children:l(w,{text:W,icon:N,mode:"bleed",onClick:I,ref:y,selected:r})})}function $(e){const{id:t,onToggle:n,selected:r,title:o}=e,i=v((()=>{n&&n(t)}),[t,n]),s=!n;return l(w,{mode:"bleed",onClick:i,justify:"flex-start",disabled:s,children:a(T,{gap:3,align:"center",children:[l(P,{size:2,children:r?l(d,{tone:s?"default":"positive",children:l(F,{})}):l(z,{})}),l(L,{flex:1,children:l(P,{children:o})}),l(D,{children:t})]})})}const ee=g((e=>{const t=()=>l(Z,{}),n=o(o({},q.options),e);return{name:"@sanity/language-filter",studio:{components:{layout:e=>G(o(o({},e),{},{options:n}))}},document:{unstable_languageFilter:(n,r)=>{let{schemaType:o,schema:i}=r;return J(i.get(o),e)?[...n,t]:n}},form:{components:{input:e=>"root"!==e.id&&p(e.schemaType)?function(e){const{options:t}=K(),n=c(["_type"]),{documentTypes:r}=t;return"string"==typeof n&&r.includes(n)?l(M,o({},e)):e.renderDefault(e)}(e):e.renderDefault(e)}}}}));export{E as defaultFilterField,J as isLanguageFilterEnabled,ee as languageFilter,K as useLanguageFilterStudioContext};//# sourceMappingURL=index.esm.js.map
1
+ var e;const t=["members","schemaType","renderDefault"];function n(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}import{jsx as l,jsxs as a,Fragment as u}from"react/jsx-runtime";import{useClient as s,useFormValue as c,useSchema as d,TextWithTone as g,definePlugin as p,isObjectSchemaType as f}from"sanity";import{useState as m,createContext as y,useEffect as h,useMemo as b,useContext as v,useCallback as L}from"react";import{Box as O,useClickOutside as j,Stack as S,Card as w,Button as T,Flex as P,Text as x,TextInput as A,Popover as D,Badge as I}from"@sanity/ui";import k from"styled-components";import{EyeClosedIcon as C,EyeOpenIcon as N,TranslateIcon as F,CheckmarkCircleIcon as z,CircleIcon as E}from"@sanity/icons";const J=(e,t,n)=>!e.name.startsWith("locale")||n.includes(t.name);function V(e,t){var n,r;const o=function(e){return"object"===(null==e?void 0:e.jsonType)&&"document"===_(e).name}(e)&&(null==(n=null==e?void 0:e.options)?void 0:n.languageFilter),i=!t.documentTypes;return!!(i&&!1!==o||!i&&o||e&&(null==(r=t.documentTypes)?void 0:r.includes(e.name)))}function _(e){return e.type?_(e.type):e}const H="@sanity/plugin/language-filter/selected-languages";function W(e){const t=q(e).map((e=>e.id));let n=t;try{const e=window.localStorage.getItem(H);e&&(n=JSON.parse(e))}catch(e){}var r;return r=t,n=n.filter((e=>r.includes(e))),n}function q(e){let{supportedLanguages:t,defaultLanguages:n}=e;return Array.isArray(t)?t.filter((e=>!(null==n?void 0:n.includes(e.id)))):[]}const B={options:{apiVersion:"2022-11-27",supportedLanguages:[],defaultLanguages:[],documentTypes:[],filterField:J},selectedLanguageIds:[],setSelectedLanguageIds:()=>console.error("LanguageFilterStudioContext not initialized")},G=y(B);function K(e){const t=s({apiVersion:"2023-01-01"}),[n,r]=m(Array.isArray(e.options.supportedLanguages)?e.options.supportedLanguages:[]);h((()=>{let n=[];Array.isArray(e.options.supportedLanguages)||async function(e){n=await e(t,{}),r(n)}(e.options.supportedLanguages)}),[t,e.options.supportedLanguages]);const i=b((()=>o(o(o({},B.options),e.options),{},{supportedLanguages:n})),[e.options,n]),[a,u]=function(e){return m((()=>{var t;return[...null!=(t=e.defaultLanguages)?t:[],...W(e)]}))}(i);return l(G.Provider,{value:{options:i,selectedLanguageIds:a,setSelectedLanguageIds:u},children:e.renderDefault(e)})}function M(){return v(G)}function Q(e){const{members:r,schemaType:i,renderDefault:l}=e,a=n(e,t),{selectedLanguageIds:u,options:s}=M(),{filterField:c}=s,d=b((()=>r.filter((e=>"field"===e.kind&&c(i,e,u)||"fieldSet"===e.kind)).map((e=>"fieldSet"===e.kind?o(o({},e),{},{fieldSet:o(o({},e.fieldSet),{},{members:e.fieldSet.members.filter((e=>"field"===e.kind&&c(i,e,u)))})}):e))),[i,r,c,u]);return l(o(o({},a),{},{members:d,schemaType:i,renderDefault:l}))}const R=e=>Array.from(new Set(e));function U(){const{selectedLanguageIds:e,setSelectedLanguageIds:t,options:n}=M(),{defaultLanguages:r=[]}=n,o=b((()=>q(n)),[n]),i=L((e=>{var n;t(R([...r,...e])),n=R([...r,...e]),window.localStorage.setItem(H,JSON.stringify(n))}),[r,t]),l=L((()=>i(o.map((e=>e.id)))),[i,o]),a=L((()=>{i(r)}),[r,i]),u=L((t=>{let n=e;n=n.includes(t)?n.filter((e=>e!==t)):R([...n,t]),i(n)}),[i,e]);return{activeLanguages:b((()=>R([...null!=r?r:[],...e])),[r,e]),allSelected:e.length===o.length+r.length,selectAll:l,selectNone:a,toggleLanguage:u}}const X=k(O)(e||(Y=["\n max-height: calc(100vh - 200px);\n"],Z||(Z=Y.slice(0)),e=Object.freeze(Object.defineProperties(Y,{raw:{value:Object.freeze(Z)}}))));var Y,Z;function $(){const{options:e}=M(),t=e.supportedLanguages.filter((t=>{var n;return null==(n=e.defaultLanguages)?void 0:n.includes(t.id)})),n=e.supportedLanguages.filter((t=>{var n;return!(null==(n=e.defaultLanguages)?void 0:n.includes(t.id))})),[r,o]=m(!1),{activeLanguages:i,allSelected:s,selectAll:c,selectNone:d,toggleLanguage:p}=U(),[f,y]=m(null),[h,b]=m(null),v=L((e=>{"ALL"===e.currentTarget.value?c():d()}),[c,d]),I=L((()=>o((e=>!e))),[]),k=L((()=>o(!1)),[]);j(k,[f,h]);const z=e.supportedLanguages.length,[E,J]=m(""),V=L((e=>{e.currentTarget.value?J(e.currentTarget.value):J("")}),[]),_=z>4,H=l(X,{overflow:"auto",children:a(S,{padding:1,space:1,children:[t.length>0&&a(u,{children:[t.map((e=>l(ee,{id:e.id,title:e.title,selected:!0},e.id))),l(w,{borderTop:!0})]}),l(T,{mode:"bleed",onClick:v,justify:"flex-start",value:s?"NONE":"ALL",disabled:!!E,children:a(P,{gap:3,align:"center",children:[l(x,{size:2,children:s?l(g,{tone:"primary",children:l(C,{})}):l(N,{})}),l(O,{flex:1,children:l(x,{children:s?"Hide all":"Show all"})})]})}),_?l(A,{onChange:V,value:E,placeholder:"Filter languages"}):l(w,{borderTop:!0}),n.filter((e=>!E||e.title.toLowerCase().includes(E.toLowerCase()))).map((e=>l(ee,{id:e.id,onToggle:p,selected:i.includes(e.id),title:e.title},e.id)))]})}),W=i.length===z?"Showing all":"Showing ".concat(i.length," / ").concat(z);return l(D,{content:H,open:r,portal:!0,ref:b,children:l(T,{text:W,icon:F,mode:"bleed",onClick:I,ref:y,selected:r})})}function ee(e){const{id:t,onToggle:n,selected:r,title:o}=e,i=L((()=>{n&&n(t)}),[t,n]),u=!n;return l(T,{mode:"bleed",onClick:i,justify:"flex-start",disabled:u,children:a(P,{gap:3,align:"center",children:[l(x,{size:2,children:r?l(g,{tone:u?"default":"positive",children:l(z,{})}):l(E,{})}),l(O,{flex:1,children:l(x,{children:o})}),l(I,{children:t})]})})}const te=p((e=>{const t=()=>l($,{}),n=o(o({},B.options),e);return{name:"@sanity/language-filter",studio:{components:{layout:e=>K(o(o({},e),{},{options:n}))}},document:{unstable_languageFilter:(n,r)=>{let{schemaType:o,schema:i}=r;return V(i.get(o),e)?[...n,t]:n}},form:{components:{input:e=>"root"!==e.id&&f(e.schemaType)?function(e){const{options:t}=M(),n=c(["_type"]);return V(d().get(n),t)?l(Q,o({},e)):e.renderDefault(e)}(e):e.renderDefault(e)}}}}));export{J as defaultFilterField,V as isLanguageFilterEnabled,te as languageFilter,M as useLanguageFilterStudioContext};//# sourceMappingURL=index.esm.js.map
package/lib/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e;const t=["members","schemaType","renderDefault"];function n(e,t){if(null==e)return{};var n,r,l=function(e,t){if(null==e)return{};var n,r,l={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function a(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(exports,"__esModule",{value:!0});var o=require("react/jsx-runtime"),s=require("sanity"),i=require("react"),u=require("@sanity/ui"),c=require("styled-components"),d=require("@sanity/icons");function g(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p=g(c);const f=(e,t,n)=>!e.name.startsWith("locale")||n.includes(t.name);function m(e,t){var n,r;const l=function(e){return"object"===(null==e?void 0:e.jsonType)&&"document"===y(e).name}(e)&&(null==(n=null==e?void 0:e.options)?void 0:n.languageFilter),a=!t.documentTypes;return!!(a&&!1!==l||!a&&l||e&&(null==(r=t.documentTypes)?void 0:r.includes(e.name)))}function y(e){return e.type?y(e.type):e}const x="@sanity/plugin/language-filter/selected-languages";function b(e){const t=j(e).map((e=>e.id));let n=t;try{const e=window.localStorage.getItem(x);e&&(n=JSON.parse(e))}catch(e){}var r;return r=t,n=n.filter((e=>r.includes(e))),n}function j(e){let{supportedLanguages:t,defaultLanguages:n}=e;return Array.isArray(t)?t.filter((e=>!(null==n?void 0:n.includes(e.id)))):[]}const h={options:{apiVersion:"2022-11-27",supportedLanguages:[],defaultLanguages:[],documentTypes:[],filterField:f},selectedLanguageIds:[],setSelectedLanguageIds:()=>console.error("LanguageFilterStudioContext not initialized")},v=i.createContext(h);function L(e){const t=s.useClient({apiVersion:"2023-01-01"}),[n,r]=i.useState(Array.isArray(e.options.supportedLanguages)?e.options.supportedLanguages:[]);i.useEffect((()=>{let n=[];Array.isArray(e.options.supportedLanguages)||async function(e){n=await e(t,{}),r(n)}(e.options.supportedLanguages)}),[t,e.options.supportedLanguages]);const a=i.useMemo((()=>l(l(l({},h.options),e.options),{},{supportedLanguages:n})),[e.options,n]),[u,c]=function(e){return i.useState((()=>{var t;return[...null!=(t=e.defaultLanguages)?t:[],...b(e)]}))}(a);return o.jsx(v.Provider,{value:{options:a,selectedLanguageIds:u,setSelectedLanguageIds:c},children:e.renderDefault(e)})}function O(){return i.useContext(v)}function S(e){const{members:r,schemaType:a,renderDefault:o}=e,s=n(e,t),{selectedLanguageIds:u,options:c}=O(),{filterField:d}=c,g=i.useMemo((()=>r.filter((e=>"field"===e.kind&&d(a,e,u)||"fieldSet"===e.kind)).map((e=>"fieldSet"===e.kind?l(l({},e),{},{fieldSet:l(l({},e.fieldSet),{},{members:e.fieldSet.members.filter((e=>"field"===e.kind&&d(a,e,u)))})}):e))),[a,r,d,u]);return o(l(l({},s),{},{members:g,schemaType:a,renderDefault:o}))}const T=e=>Array.from(new Set(e));function C(){const{selectedLanguageIds:e,setSelectedLanguageIds:t,options:n}=O(),{defaultLanguages:r=[]}=n,l=i.useMemo((()=>j(n)),[n]),a=i.useCallback((e=>{var n;t(T([...r,...e])),n=T([...r,...e]),window.localStorage.setItem(x,JSON.stringify(n))}),[r,t]),o=i.useCallback((()=>a(l.map((e=>e.id)))),[a,l]),s=i.useCallback((()=>{a(r)}),[r,a]),u=i.useCallback((t=>{let n=e;n=n.includes(t)?n.filter((e=>e!==t)):T([...n,t]),a(n)}),[a,e]);return{activeLanguages:i.useMemo((()=>T([...null!=r?r:[],...e])),[r,e]),allSelected:e.length===l.length+r.length,selectAll:o,selectNone:s,toggleLanguage:u}}const w=p.default(u.Box)(e||(k=["\n max-height: calc(100vh - 200px);\n"],P||(P=k.slice(0)),e=Object.freeze(Object.defineProperties(k,{raw:{value:Object.freeze(P)}}))));var k,P;function I(){const{options:e}=O(),t=e.supportedLanguages.filter((t=>{var n;return null==(n=e.defaultLanguages)?void 0:n.includes(t.id)})),n=e.supportedLanguages.filter((t=>{var n;return!(null==(n=e.defaultLanguages)?void 0:n.includes(t.id))})),[r,l]=i.useState(!1),{activeLanguages:a,allSelected:c,selectAll:g,selectNone:p,toggleLanguage:f}=C(),[m,y]=i.useState(null),[x,b]=i.useState(null),j=i.useCallback((e=>{"ALL"===e.currentTarget.value?g():p()}),[g,p]),h=i.useCallback((()=>l((e=>!e))),[]),v=i.useCallback((()=>l(!1)),[]);u.useClickOutside(v,[m,x]);const L=e.supportedLanguages.length,[S,T]=i.useState(""),k=i.useCallback((e=>{e.currentTarget.value?T(e.currentTarget.value):T("")}),[]),P=L>4,I=o.jsx(w,{overflow:"auto",children:o.jsxs(u.Stack,{padding:1,space:1,children:[t.length>0&&o.jsxs(o.Fragment,{children:[t.map((e=>o.jsx(F,{id:e.id,title:e.title,selected:!0},e.id))),o.jsx(u.Card,{borderTop:!0})]}),o.jsx(u.Button,{mode:"bleed",onClick:j,justify:"flex-start",value:c?"NONE":"ALL",disabled:!!S,children:o.jsxs(u.Flex,{gap:3,align:"center",children:[o.jsx(u.Text,{size:2,children:c?o.jsx(s.TextWithTone,{tone:"primary",children:o.jsx(d.EyeClosedIcon,{})}):o.jsx(d.EyeOpenIcon,{})}),o.jsx(u.Box,{flex:1,children:o.jsx(u.Text,{children:c?"Hide all":"Show all"})})]})}),P?o.jsx(u.TextInput,{onChange:k,value:S,placeholder:"Filter languages"}):o.jsx(u.Card,{borderTop:!0}),n.filter((e=>!S||e.title.toLowerCase().includes(S.toLowerCase()))).map((e=>o.jsx(F,{id:e.id,onToggle:f,selected:a.includes(e.id),title:e.title},e.id)))]})}),A=a.length===L?"Showing all":"Showing ".concat(a.length," / ").concat(L);return o.jsx(u.Popover,{content:I,open:r,portal:!0,ref:b,children:o.jsx(u.Button,{text:A,icon:d.TranslateIcon,mode:"bleed",onClick:h,ref:y,selected:r})})}function F(e){const{id:t,onToggle:n,selected:r,title:l}=e,a=i.useCallback((()=>{n&&n(t)}),[t,n]),c=!n;return o.jsx(u.Button,{mode:"bleed",onClick:a,justify:"flex-start",disabled:c,children:o.jsxs(u.Flex,{gap:3,align:"center",children:[o.jsx(u.Text,{size:2,children:r?o.jsx(s.TextWithTone,{tone:c?"default":"positive",children:o.jsx(d.CheckmarkCircleIcon,{})}):o.jsx(d.CircleIcon,{})}),o.jsx(u.Box,{flex:1,children:o.jsx(u.Text,{children:l})}),o.jsx(u.Badge,{children:t})]})})}const A=s.definePlugin((e=>{const t=()=>o.jsx(I,{}),n=l(l({},h.options),e);return{name:"@sanity/language-filter",studio:{components:{layout:e=>L(l(l({},e),{},{options:n}))}},document:{unstable_languageFilter:(n,r)=>{let{schemaType:l,schema:a}=r;return m(a.get(l),e)?[...n,t]:n}},form:{components:{input:e=>"root"!==e.id&&s.isObjectSchemaType(e.schemaType)?function(e){const{options:t}=O(),n=s.useFormValue(["_type"]),{documentTypes:r}=t;return"string"==typeof n&&r.includes(n)?o.jsx(S,l({},e)):e.renderDefault(e)}(e):e.renderDefault(e)}}}}));exports.defaultFilterField=f,exports.isLanguageFilterEnabled=m,exports.languageFilter=A,exports.useLanguageFilterStudioContext=O;//# sourceMappingURL=index.js.map
1
+ "use strict";var e;const t=["members","schemaType","renderDefault"];function n(e,t){if(null==e)return{};var n,r,l=function(e,t){if(null==e)return{};var n,r,l={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function a(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(exports,"__esModule",{value:!0});var o=require("react/jsx-runtime"),s=require("sanity"),i=require("react"),u=require("@sanity/ui"),c=require("styled-components"),d=require("@sanity/icons");function g(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p=g(c);const f=(e,t,n)=>!e.name.startsWith("locale")||n.includes(t.name);function m(e,t){var n,r;const l=function(e){return"object"===(null==e?void 0:e.jsonType)&&"document"===y(e).name}(e)&&(null==(n=null==e?void 0:e.options)?void 0:n.languageFilter),a=!t.documentTypes;return!!(a&&!1!==l||!a&&l||e&&(null==(r=t.documentTypes)?void 0:r.includes(e.name)))}function y(e){return e.type?y(e.type):e}const x="@sanity/plugin/language-filter/selected-languages";function b(e){const t=j(e).map((e=>e.id));let n=t;try{const e=window.localStorage.getItem(x);e&&(n=JSON.parse(e))}catch(e){}var r;return r=t,n=n.filter((e=>r.includes(e))),n}function j(e){let{supportedLanguages:t,defaultLanguages:n}=e;return Array.isArray(t)?t.filter((e=>!(null==n?void 0:n.includes(e.id)))):[]}const h={options:{apiVersion:"2022-11-27",supportedLanguages:[],defaultLanguages:[],documentTypes:[],filterField:f},selectedLanguageIds:[],setSelectedLanguageIds:()=>console.error("LanguageFilterStudioContext not initialized")},v=i.createContext(h);function L(e){const t=s.useClient({apiVersion:"2023-01-01"}),[n,r]=i.useState(Array.isArray(e.options.supportedLanguages)?e.options.supportedLanguages:[]);i.useEffect((()=>{let n=[];Array.isArray(e.options.supportedLanguages)||async function(e){n=await e(t,{}),r(n)}(e.options.supportedLanguages)}),[t,e.options.supportedLanguages]);const a=i.useMemo((()=>l(l(l({},h.options),e.options),{},{supportedLanguages:n})),[e.options,n]),[u,c]=function(e){return i.useState((()=>{var t;return[...null!=(t=e.defaultLanguages)?t:[],...b(e)]}))}(a);return o.jsx(v.Provider,{value:{options:a,selectedLanguageIds:u,setSelectedLanguageIds:c},children:e.renderDefault(e)})}function O(){return i.useContext(v)}function S(e){const{members:r,schemaType:a,renderDefault:o}=e,s=n(e,t),{selectedLanguageIds:u,options:c}=O(),{filterField:d}=c,g=i.useMemo((()=>r.filter((e=>"field"===e.kind&&d(a,e,u)||"fieldSet"===e.kind)).map((e=>"fieldSet"===e.kind?l(l({},e),{},{fieldSet:l(l({},e.fieldSet),{},{members:e.fieldSet.members.filter((e=>"field"===e.kind&&d(a,e,u)))})}):e))),[a,r,d,u]);return o(l(l({},s),{},{members:g,schemaType:a,renderDefault:o}))}const T=e=>Array.from(new Set(e));function C(){const{selectedLanguageIds:e,setSelectedLanguageIds:t,options:n}=O(),{defaultLanguages:r=[]}=n,l=i.useMemo((()=>j(n)),[n]),a=i.useCallback((e=>{var n;t(T([...r,...e])),n=T([...r,...e]),window.localStorage.setItem(x,JSON.stringify(n))}),[r,t]),o=i.useCallback((()=>a(l.map((e=>e.id)))),[a,l]),s=i.useCallback((()=>{a(r)}),[r,a]),u=i.useCallback((t=>{let n=e;n=n.includes(t)?n.filter((e=>e!==t)):T([...n,t]),a(n)}),[a,e]);return{activeLanguages:i.useMemo((()=>T([...null!=r?r:[],...e])),[r,e]),allSelected:e.length===l.length+r.length,selectAll:o,selectNone:s,toggleLanguage:u}}const w=p.default(u.Box)(e||(k=["\n max-height: calc(100vh - 200px);\n"],P||(P=k.slice(0)),e=Object.freeze(Object.defineProperties(k,{raw:{value:Object.freeze(P)}}))));var k,P;function I(){const{options:e}=O(),t=e.supportedLanguages.filter((t=>{var n;return null==(n=e.defaultLanguages)?void 0:n.includes(t.id)})),n=e.supportedLanguages.filter((t=>{var n;return!(null==(n=e.defaultLanguages)?void 0:n.includes(t.id))})),[r,l]=i.useState(!1),{activeLanguages:a,allSelected:c,selectAll:g,selectNone:p,toggleLanguage:f}=C(),[m,y]=i.useState(null),[x,b]=i.useState(null),j=i.useCallback((e=>{"ALL"===e.currentTarget.value?g():p()}),[g,p]),h=i.useCallback((()=>l((e=>!e))),[]),v=i.useCallback((()=>l(!1)),[]);u.useClickOutside(v,[m,x]);const L=e.supportedLanguages.length,[S,T]=i.useState(""),k=i.useCallback((e=>{e.currentTarget.value?T(e.currentTarget.value):T("")}),[]),P=L>4,I=o.jsx(w,{overflow:"auto",children:o.jsxs(u.Stack,{padding:1,space:1,children:[t.length>0&&o.jsxs(o.Fragment,{children:[t.map((e=>o.jsx(F,{id:e.id,title:e.title,selected:!0},e.id))),o.jsx(u.Card,{borderTop:!0})]}),o.jsx(u.Button,{mode:"bleed",onClick:j,justify:"flex-start",value:c?"NONE":"ALL",disabled:!!S,children:o.jsxs(u.Flex,{gap:3,align:"center",children:[o.jsx(u.Text,{size:2,children:c?o.jsx(s.TextWithTone,{tone:"primary",children:o.jsx(d.EyeClosedIcon,{})}):o.jsx(d.EyeOpenIcon,{})}),o.jsx(u.Box,{flex:1,children:o.jsx(u.Text,{children:c?"Hide all":"Show all"})})]})}),P?o.jsx(u.TextInput,{onChange:k,value:S,placeholder:"Filter languages"}):o.jsx(u.Card,{borderTop:!0}),n.filter((e=>!S||e.title.toLowerCase().includes(S.toLowerCase()))).map((e=>o.jsx(F,{id:e.id,onToggle:f,selected:a.includes(e.id),title:e.title},e.id)))]})}),A=a.length===L?"Showing all":"Showing ".concat(a.length," / ").concat(L);return o.jsx(u.Popover,{content:I,open:r,portal:!0,ref:b,children:o.jsx(u.Button,{text:A,icon:d.TranslateIcon,mode:"bleed",onClick:h,ref:y,selected:r})})}function F(e){const{id:t,onToggle:n,selected:r,title:l}=e,a=i.useCallback((()=>{n&&n(t)}),[t,n]),c=!n;return o.jsx(u.Button,{mode:"bleed",onClick:a,justify:"flex-start",disabled:c,children:o.jsxs(u.Flex,{gap:3,align:"center",children:[o.jsx(u.Text,{size:2,children:r?o.jsx(s.TextWithTone,{tone:c?"default":"positive",children:o.jsx(d.CheckmarkCircleIcon,{})}):o.jsx(d.CircleIcon,{})}),o.jsx(u.Box,{flex:1,children:o.jsx(u.Text,{children:l})}),o.jsx(u.Badge,{children:t})]})})}const A=s.definePlugin((e=>{const t=()=>o.jsx(I,{}),n=l(l({},h.options),e);return{name:"@sanity/language-filter",studio:{components:{layout:e=>L(l(l({},e),{},{options:n}))}},document:{unstable_languageFilter:(n,r)=>{let{schemaType:l,schema:a}=r;return m(a.get(l),e)?[...n,t]:n}},form:{components:{input:e=>"root"!==e.id&&s.isObjectSchemaType(e.schemaType)?function(e){const{options:t}=O(),n=s.useFormValue(["_type"]);return m(s.useSchema().get(n),t)?o.jsx(S,l({},e)):e.renderDefault(e)}(e):e.renderDefault(e)}}}}));exports.defaultFilterField=f,exports.isLanguageFilterEnabled=m,exports.languageFilter=A,exports.useLanguageFilterStudioContext=O;//# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanity/language-filter",
3
- "version": "3.2.0",
3
+ "version": "3.2.1",
4
4
  "description": "A Sanity plugin that supports filtering localized fields by language",
5
5
  "homepage": "https://github.com/sanity-io/language-filter#readme",
6
6
  "bugs": {
@@ -1,16 +1,15 @@
1
1
  import React, {useMemo} from 'react'
2
- import {ObjectInputProps, ObjectMember, useFormValue} from 'sanity'
2
+ import {ObjectInputProps, ObjectMember, useFormValue, useSchema} from 'sanity'
3
3
  import {useLanguageFilterStudioContext} from './LanguageFilterStudioContext'
4
+ import {isLanguageFilterEnabled} from './filterField'
4
5
 
5
6
  // First check that this Object is in a schema type for which language-filter is enabled
6
7
  export function FilteredObjectWrapper(props: ObjectInputProps) {
7
8
  const {options} = useLanguageFilterStudioContext()
8
9
 
9
- const documentType = useFormValue(['_type'])
10
- const {documentTypes} = options
11
- const languageFilterEnabled =
12
- typeof documentType === 'string' && documentTypes.includes(documentType)
13
-
10
+ const documentType = useFormValue(['_type']) as string
11
+ const schema = useSchema()
12
+ const languageFilterEnabled = isLanguageFilterEnabled(schema.get(documentType), options)
14
13
  return languageFilterEnabled ? <FilteredObjectInput {...props} /> : props.renderDefault(props)
15
14
  }
16
15