@plasmicpkgs/plasmic-sanity-io 1.0.153 → 1.0.155
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/index.d.mts +52 -0
- package/dist/index.d.ts +52 -7
- package/dist/index.js +531 -5
- package/dist/index.mjs +496 -0
- package/package.json +10 -10
- package/dist/plasmic-sanity-io.cjs.development.js +0 -900
- package/dist/plasmic-sanity-io.cjs.development.js.map +0 -1
- package/dist/plasmic-sanity-io.cjs.production.min.js +0 -2
- package/dist/plasmic-sanity-io.cjs.production.min.js.map +0 -1
- package/dist/plasmic-sanity-io.esm.js +0 -886
- package/dist/plasmic-sanity-io.esm.js.map +0 -1
- package/dist/sanity.d.ts +0 -43
- package/dist/utils.d.ts +0 -4
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plasmic-sanity-io.cjs.development.js","sources":["../src/utils.ts","../src/sanity.tsx","../src/index.tsx"],"sourcesContent":["export const filterParameters = [\n {\n value: '==',\n label: 'Is'\n },\n {\n value: '!=',\n label: 'Is not'\n }, {\n value: '>',\n label: 'Greater than'\n }, {\n value: '<',\n label: 'Less than'\n }, {\n value: '<=',\n label: 'Less than or equal'\n },\n {\n value: '>=',\n label: 'Greater than or equal '\n },\n]\n","import {\n ComponentMeta,\n DataProvider,\n GlobalContextMeta,\n repeatedElement,\n useSelector,\n} from \"@plasmicapp/host\";\nimport { usePlasmicQueryData } from \"@plasmicapp/query\";\nimport { createClient } from \"@sanity/client\";\nimport imageUrlBuilder from \"@sanity/image-url\";\nimport { pascalCase } from \"change-case\";\nimport get from \"dlv\";\nimport React, { ReactNode, useContext } from \"react\";\nimport { filterParameters } from \"./utils\";\n\nexport function ensure<T>(x: T | null | undefined): T {\n if (x === null || x === undefined) {\n throw new Error(`Value must not be undefined or null`);\n } else {\n return x;\n }\n}\n\nconst modulePath = \"@plasmicpkgs/plasmic-sanity-io\";\n\nconst makeDataProviderName = (docType: string) =>\n `currentSanity${pascalCase(docType)}Item`;\n\ninterface SanityCredentialsProviderProps {\n projectId?: string;\n dataset?: string;\n apiVersion?: string;\n token?: string;\n useCdn?: boolean;\n}\n\nfunction makeSanityClient(creds: SanityCredentialsProviderProps) {\n const sanity = createClient({\n projectId: creds.projectId,\n dataset: creds.dataset,\n apiVersion: creds.apiVersion ? creds.apiVersion : \"v1\",\n token: creds.token,\n useCdn: creds.useCdn,\n });\n return sanity;\n}\n\nconst CredentialsContext = React.createContext<\n SanityCredentialsProviderProps | undefined\n>(undefined);\n\nexport const sanityCredentialsProviderMeta: GlobalContextMeta<SanityCredentialsProviderProps> =\n {\n name: \"SanityCredentialsProvider\",\n displayName: \"Sanity Credentials Provider\",\n description: `Get your project ID, dataset, and token [here](https://www.sanity.io/manage).\n\nAdd 'https://host.plasmicdev.com' (or your app host origin) as an authorized host in the CORS origins section of your Sanity project.\n\n[See tutorial video](https://www.youtube.com/watch?v=dLeu7I4RsYg).`,\n importName: \"SanityCredentialsProvider\",\n importPath: modulePath,\n props: {\n projectId: {\n type: \"string\",\n displayName: \"Project ID\",\n defaultValueHint: \"b2gfz67v\",\n defaultValue: \"b2gfz67v\",\n description: \"The ID of the project to use.\",\n },\n dataset: {\n type: \"string\",\n displayName: \"Dataset\",\n defaultValueHint: \"production\",\n defaultValue: \"production\",\n description: \"The dataset to use.\",\n },\n apiVersion: {\n type: \"string\",\n displayName: \"API Version\",\n defaultValueHint: \"v1\",\n description:\n \"The API version to use (if not set, 'v1' will be used) - see https://www.sanity.io/docs/js-client#specifying-api-version.\",\n },\n token: {\n type: \"string\",\n displayName: \"Token\",\n description:\n \"The token to use (or leave blank for unauthenticated usage) - you can create tokens in the API section of your project (i.e. https://www.sanity.io/manage/personal/project/PROJECT_ID/api#tokens).\",\n },\n useCdn: {\n type: \"boolean\",\n displayName: \"Use CDN?\",\n defaultValueHint: false,\n description:\n \"Whether you want to use CDN ('false' if you want to ensure fresh data).\",\n },\n },\n };\n\nexport function SanityCredentialsProvider({\n projectId,\n dataset,\n apiVersion,\n token,\n useCdn,\n children,\n}: React.PropsWithChildren<SanityCredentialsProviderProps>) {\n return (\n <CredentialsContext.Provider\n value={{ projectId, dataset, apiVersion, token, useCdn }}\n >\n {children}\n </CredentialsContext.Provider>\n );\n}\n\ninterface SanityFetcherProps {\n groq?: string;\n docType: string;\n filterField?: string;\n filterValue?: string;\n filterParameter?: string;\n noAutoRepeat?: boolean;\n limit?: string;\n children?: ReactNode;\n className?: string;\n noLayout?: boolean;\n setControlContextData?: (data: {\n docTypes?: string[];\n sanityFields?: string[];\n queryOptions?: [];\n }) => void;\n}\n\nexport const sanityFetcherMeta: ComponentMeta<SanityFetcherProps> = {\n name: \"SanityFetcher\",\n displayName: \"Sanity Fetcher\",\n importName: \"SanityFetcher\",\n importPath: modulePath,\n providesData: true,\n description: `Fetches Sanity data of a given collection, and repeats \\`children\\` slot content for each row fetched.\n\n[See tutorial video](https://www.youtube.com/watch?v=1SLoVY3hkQ4) and [GROQ cheat sheet](https://www.sanity.io/docs/query-cheat-sheet).`,\n defaultStyles: {\n display: \"grid\",\n gridTemplateColumns: \"1fr 1fr 1fr 1fr\",\n gridRowGap: \"8px\",\n gridColumnGap: \"8px\",\n padding: \"8px\",\n maxWidth: \"100%\",\n },\n props: {\n children: {\n type: \"slot\",\n defaultValue: {\n type: \"vbox\",\n styles: {\n padding: \"8px\",\n },\n children: {\n type: \"component\",\n name: \"SanityField\",\n },\n },\n },\n groq: {\n type: \"string\",\n displayName: \"GROQ\",\n description: \"Query in GROQ.\",\n defaultValueHint: \"*[_type == 'movie']\",\n // Hide this if there's no groq, AND there's docType, so we're in\n // \"docType\" mode\n hidden: (props) => !props.groq && !!props.docType,\n },\n docType: {\n type: \"choice\",\n options: (props, ctx) => {\n return ctx?.docTypes ?? [];\n },\n displayName: \"Document type\",\n description:\n \"Document type to be queried (*[_type == DOC_TYPE] shortcut).\",\n // Hide this if groq is specified, as groq always takes precedence\n hidden: (props) => !!props.groq,\n },\n filterField: {\n type: \"choice\",\n displayName: \"Filter field\",\n description: \"Field (from Collection) to filter by\",\n options: (props, ctx) => ctx?.sanityFields ?? [],\n // Hide this if there's groq (so we're just using groq), or if there's\n // no docType selected yet\n hidden: (props, ctx) => !!props.groq || !props.docType,\n },\n filterParameter: {\n type: \"choice\",\n displayName: \"Filter Operation\",\n description:\n \"Filter Option to filter by. Read more (https://www.sanity.io/docs/groq-operators#3b7211e976f6)\",\n options: (props, ctx) => ctx?.queryOptions ?? [],\n // Hide if in groq mode, or if no filter field is selected yet\n hidden: (props, ctx) => !!props.groq || !props.filterField,\n },\n filterValue: {\n type: \"string\",\n displayName: \"Filter value\",\n description: \"Value to filter by, should be of filter field type\",\n // Hide if in groq mode, or if no filter field is selected yet\n hidden: (props, ctx) => !!props.groq || !props.filterField,\n },\n limit: {\n type: \"string\",\n displayName: \"Limit\",\n description: \"Limit\",\n // Hide if in groq mode\n hidden: (props) => !!props.groq || !props.docType,\n },\n noAutoRepeat: {\n type: \"boolean\",\n displayName: \"No auto-repeat\",\n description: \"Do not automatically repeat children for every category.\",\n defaultValue: false,\n },\n noLayout: {\n type: \"boolean\",\n displayName: \"No layout\",\n description:\n \"When set, Sanity Fetcher will not layout its children; instead, the layout set on its parent element will be used. Useful if you want to set flex gap or control container tag type.\",\n defaultValue: false,\n },\n },\n};\n\nexport function SanityFetcher({\n groq,\n docType,\n filterField,\n filterValue,\n filterParameter,\n limit,\n noAutoRepeat,\n children,\n className,\n noLayout,\n\n setControlContextData,\n}: SanityFetcherProps) {\n const projectIdRegex = new RegExp(/^[-a-z0-9]+$/i);\n const datasetRegex = new RegExp(\n /^(~[a-z0-9]{1}[-\\w]{0,63}|[a-z0-9]{1}[-\\w]{0,63})$/\n );\n const dateRegex = new RegExp(/^\\d{4}-\\d{2}-\\d{2}$/);\n\n const creds = ensure(useContext(CredentialsContext));\n\n if (!creds.projectId || !projectIdRegex.test(creds.projectId)) {\n return (\n <div className={className}>\n Please specify a valid projectId, it can only contain only a-z, 0-9 and\n dashes.\n </div>\n );\n } else if (!creds.dataset || !datasetRegex.test(creds.dataset)) {\n return (\n <div className={className}>\n Please specify a valid dataset, they can only contain lowercase\n characters, numbers, underscores and dashes, and start with tilde, and\n be maximum 64 characters.\n </div>\n );\n } else if (creds.apiVersion) {\n if (\n creds.apiVersion !== \"v1\" &&\n creds.apiVersion !== \"1\" &&\n creds.apiVersion !== \"X\"\n ) {\n const date = new Date(creds.apiVersion);\n if (\n !(\n dateRegex.test(creds.apiVersion) &&\n date instanceof Date &&\n date.getTime() > 0\n )\n ) {\n return (\n <div className={className}>\n Please specify a valid API version, expected `v1`, `1` or date in\n format `YYYY-MM-DD`.\n </div>\n );\n }\n }\n }\n\n const filterUniqueDocTypes = (records: { _type: string }[]): string[] =>\n records\n .map((record) => record._type)\n .reduce((acc, type) => {\n if (!acc.includes(type)) {\n acc.push(type);\n }\n return acc;\n }, [] as string[]);\n\n const allDataTypes = usePlasmicQueryData<any[] | null>(\n JSON.stringify(creds) + \"/SANITY_DOCTYPES\",\n async () => {\n const sanity = makeSanityClient(creds);\n const resp = await sanity.fetch(\"*{_type}\").then(filterUniqueDocTypes);\n return resp;\n }\n );\n const docTypes = allDataTypes.data ?? false;\n\n const hasFilter =\n !!docType && !!filterField && !!filterParameter && !!filterValue;\n\n const generateUnfilteredGroq = () => {\n if (groq) {\n console.log(\"ORIG GROQ\", groq);\n return groq;\n } else if (docType) {\n let query = `*[_type=='${docType}']`;\n if (hasFilter) {\n // Ask for only a small sample, so we know how to generate the filter\n query += `[0...10]`;\n } else if (limit) {\n query += `[0...${limit}]`;\n }\n console.log(\"UNFILTERED GROQ\", query);\n return query;\n } else {\n return null;\n }\n };\n\n const unfilteredQuery = generateUnfilteredGroq();\n\n const sanity = makeSanityClient(creds);\n\n const { data: unfilteredData } = usePlasmicQueryData<any[] | null>(\n unfilteredQuery\n ? JSON.stringify({ fullQuery: unfilteredQuery, creds })\n : null,\n async () => {\n return sanity.fetch(unfilteredQuery!);\n }\n );\n\n const generateFilteredQuery = () => {\n if (!hasFilter || !unfilteredData) {\n return null;\n }\n\n const fieldValues = Object.values(unfilteredData)\n .flatMap((model: any) => (Array.isArray(model) ? model : [model]))\n .map((item: any) => {\n const field = Object.entries(item).find((el) => el[0] === filterField);\n return field?.[1];\n });\n\n let query = `*[_type=='${docType}'`;\n\n if (fieldValues.some((v) => typeof v === \"string\")) {\n query = `${query} && ${filterField} ${filterParameter} \"${filterValue}\"`;\n } else {\n query = `${query} && ${filterField} ${filterParameter} ${filterValue}`;\n }\n\n if (limit) {\n query = `${query}][0...${limit}]`;\n } else {\n query = `${query}]`;\n }\n console.log(\"FILTERED GROQ\", query);\n return query;\n };\n\n const filteredQuery = generateFilteredQuery();\n const { data: filteredData } = usePlasmicQueryData<any[] | null>(\n filteredQuery ? JSON.stringify({ filteredQuery, creds }) : null,\n async () => {\n const resp = await sanity.fetch(filteredQuery!);\n return resp;\n }\n );\n\n if (!docTypes) {\n return (\n <div className={className}>\n Please configure the Sanity provider with a valid projectId, dataset,\n and token (if necessary). Don't forget to add\n 'https://host.plasmicdev.com' as an authorized host on the CORS origins\n section of your project.\n </div>\n );\n }\n\n setControlContextData?.({\n docTypes,\n });\n\n if (!groq && !docType) {\n return (\n <div className={className}>\n Please specify a valid GROQ query or select a Document type.\n </div>\n );\n }\n\n if (!unfilteredData) {\n return <div className={className}>Loading...</div>;\n }\n\n let sanityFields = unfilteredData.map((item) => {\n const fields = Object.keys(item).filter((field) => {\n const value = get(item, field);\n return (\n (typeof value !== \"object\" &&\n value._type !== \"image\" &&\n typeof value === \"number\") ||\n (typeof value === \"string\" &&\n !value.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$/))\n );\n });\n\n return fields;\n });\n\n let operators;\n\n const matchedFields = Object.values(unfilteredData)\n .flatMap((model: any) => (Array.isArray(model) ? model : [model]))\n .map((item: any) => {\n const fields = Object.entries(item).find((el) => el[0] === filterField);\n return fields;\n });\n\n Object.values(matchedFields)\n .map((model: any) => (Array.isArray(model) ? model : [model]))\n .map((item: any) => {\n if (typeof item[1] === \"number\" && typeof item[1] !== \"object\") {\n operators = filterParameters;\n } else if (\n typeof item[1] !== \"number\" &&\n typeof item[1] !== \"object\" &&\n typeof item[1] === \"string\"\n ) {\n operators = [\n {\n value: \"==\",\n label: \"Equals\",\n },\n {\n value: \"!=\",\n label: \"Not equals\",\n },\n ];\n }\n });\n\n setControlContextData?.({\n queryOptions: operators,\n docTypes,\n sanityFields: sanityFields[0]!,\n });\n\n if (hasFilter) {\n if (!filterParameter) {\n return <div className={className}>Please specify a filter operation</div>;\n }\n if (!filterValue) {\n return <div className={className}>Please specify a filter value</div>;\n }\n }\n\n if (hasFilter && !filteredData) {\n return <div className={className}>Loading...</div>;\n }\n\n const resultData = hasFilter ? filteredData! : unfilteredData;\n\n const imageBuilder = imageUrlBuilder(sanity);\n const repElements = noAutoRepeat\n ? children\n : resultData.map((item, index) => {\n Object.keys(item).forEach((field) => {\n if (item[field]._type === \"image\") {\n item[field].imgUrl = imageBuilder\n .image(item[field])\n .ignoreImageParams()\n .toString();\n }\n });\n\n return docType ? (\n <DataProvider\n key={item._id}\n name={\"sanityItem\"}\n data={item}\n hidden={true}\n >\n <DataProvider name={makeDataProviderName(docType)} data={item}>\n {repeatedElement(index, children)}\n </DataProvider>\n </DataProvider>\n ) : (\n <DataProvider key={item._id} name={\"sanityItem\"} data={item}>\n {repeatedElement(index, children)}\n </DataProvider>\n );\n });\n\n return (\n <DataProvider name=\"sanityItems\" data={resultData}>\n {noLayout ? (\n <> {repElements} </>\n ) : (\n <div className={className}> {repElements} </div>\n )}\n </DataProvider>\n );\n}\n\ninterface SanityFieldProps {\n className?: string;\n path?: string;\n field?: string;\n setControlContextData?: (data: {\n fields: string[];\n isImage: boolean;\n }) => void;\n}\n\nexport const sanityFieldMeta: ComponentMeta<SanityFieldProps> = {\n name: \"SanityField\",\n displayName: \"Sanity Field\",\n importName: \"SanityField\",\n importPath: modulePath,\n props: {\n path: {\n type: \"string\",\n displayName: \"Path\",\n description: \"Field path - see https://www.sanity.io/docs/ids.\",\n defaultValueHint: \"castMembers.0._key\",\n },\n field: {\n type: \"choice\",\n options: (props, ctx) => {\n return ctx?.fields ?? [];\n },\n displayName: \"Field\",\n description: \"Field to be displayed.\",\n },\n },\n};\n\nexport function SanityField({\n className,\n path,\n field,\n setControlContextData,\n}: SanityFieldProps) {\n const item = useSelector(\"sanityItem\");\n if (!item) {\n return <div>SanityField must be used within a SanityFetcher</div>;\n }\n\n // Getting only fields that aren't objects\n const displayableFields = Object.keys(item).filter((field) => {\n const value = get(item, field);\n return typeof value !== \"object\" || value._type === \"image\";\n });\n setControlContextData?.({\n fields: displayableFields,\n isImage: false,\n });\n\n if (!path && !field) {\n return <div>Please specify a valid path or select a field.</div>;\n }\n\n if (!path) {\n path = field;\n }\n\n const data = get(item, path as string);\n\n setControlContextData?.({\n fields: displayableFields,\n isImage: data?._type == \"image\",\n });\n\n if (!data) {\n return <div>Please specify a valid path.</div>;\n } else if (data?._type === \"image\") {\n return <img className={className} src={data.imgUrl} />;\n } else {\n return <div className={className}>{data}</div>;\n }\n}\n","import registerComponent, {\n ComponentMeta,\n} from \"@plasmicapp/host/registerComponent\";\nimport registerGlobalContext from \"@plasmicapp/host/registerGlobalContext\";\nimport {\n SanityCredentialsProvider,\n sanityCredentialsProviderMeta,\n SanityFetcher,\n sanityFetcherMeta,\n SanityField,\n sanityFieldMeta,\n} from \"./sanity\";\n\n\nexport function registerAll(loader?: {\n registerComponent: typeof registerComponent;\n registerGlobalContext: typeof registerGlobalContext;\n}) {\n const _registerComponent = <T extends React.ComponentType<any>>(\n Component: T,\n defaultMeta: ComponentMeta<React.ComponentProps<T>>\n ) => {\n if (loader) {\n loader.registerComponent(Component, defaultMeta);\n } else {\n registerComponent(Component, defaultMeta);\n }\n };\n\n if (loader) {\n loader.registerGlobalContext(SanityCredentialsProvider, sanityCredentialsProviderMeta);\n } else {\n registerGlobalContext(SanityCredentialsProvider, sanityCredentialsProviderMeta);\n }\n\n _registerComponent(SanityFetcher, sanityFetcherMeta);\n _registerComponent(SanityField, sanityFieldMeta);\n}\n\nexport * from \"./sanity\";"],"names":["filterParameters","value","label","ensure","x","undefined","Error","modulePath","makeDataProviderName","docType","pascalCase","makeSanityClient","creds","sanity","createClient","projectId","dataset","apiVersion","token","useCdn","CredentialsContext","React","createContext","sanityCredentialsProviderMeta","name","displayName","description","importName","importPath","props","type","defaultValueHint","defaultValue","SanityCredentialsProvider","_ref","children","Provider","sanityFetcherMeta","providesData","defaultStyles","display","gridTemplateColumns","gridRowGap","gridColumnGap","padding","maxWidth","styles","groq","hidden","options","ctx","_ctx$docTypes","docTypes","filterField","_ctx$sanityFields","sanityFields","filterParameter","_ctx$queryOptions","queryOptions","filterValue","limit","noAutoRepeat","noLayout","SanityFetcher","_ref2","className","setControlContextData","projectIdRegex","RegExp","datasetRegex","dateRegex","useContext","test","date","Date","getTime","filterUniqueDocTypes","records","map","record","_type","reduce","acc","includes","push","allDataTypes","usePlasmicQueryData","JSON","stringify","_asyncToGenerator","_regeneratorRuntime","mark","_callee","resp","wrap","_callee$","_context","prev","next","fetch","then","sent","abrupt","stop","_allDataTypes$data","data","hasFilter","generateUnfilteredGroq","console","log","query","unfilteredQuery","_usePlasmicQueryData","fullQuery","_callee2","_callee2$","_context2","unfilteredData","generateFilteredQuery","fieldValues","Object","values","flatMap","model","Array","isArray","item","field","entries","find","el","some","v","filteredQuery","_usePlasmicQueryData2","_callee3","_callee3$","_context3","filteredData","fields","keys","filter","get","match","operators","matchedFields","resultData","imageBuilder","imageUrlBuilder","repElements","index","forEach","imgUrl","image","ignoreImageParams","toString","DataProvider","key","_id","repeatedElement","sanityFieldMeta","path","_ctx$fields","SanityField","_ref6","useSelector","displayableFields","isImage","src","registerAll","loader","_registerComponent","Component","defaultMeta","registerComponent","registerGlobalContext"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=e(require("@plasmicapp/host/registerComponent")),r=e(require("@plasmicapp/host/registerGlobalContext")),n=require("@plasmicapp/host"),a=require("@plasmicapp/query"),i=require("@sanity/client"),o=e(require("@sanity/image-url")),s=require("change-case"),l=e(require("dlv")),u=require("react"),c=e(u);function p(){p=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",s=i.asyncIterator||"@@asyncIterator",l=i.toStringTag||"@@toStringTag";function u(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,r){return e[t]=r}}function c(e,t,r,n){var i=Object.create((t&&t.prototype instanceof v?t:v).prototype),o=new I(n||[]);return a(i,"_invoke",{value:O(e,r,o)}),i}function d(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=c;var f="suspendedStart",y="executing",h="completed",m={};function v(){}function g(){}function w(){}var b={};u(b,o,(function(){return this}));var E=Object.getPrototypeOf,x=E&&E(E(_([])));x&&x!==r&&n.call(x,o)&&(b=x);var N=w.prototype=v.prototype=Object.create(b);function P(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function j(e,t){function r(a,i,o,s){var l=d(e[a],e,i);if("throw"!==l.type){var u=l.arg,c=u.value;return c&&"object"==typeof c&&n.call(c,"__await")?t.resolve(c.__await).then((function(e){r("next",e,o,s)}),(function(e){r("throw",e,o,s)})):t.resolve(c).then((function(e){u.value=e,o(u)}),(function(e){return r("throw",e,o,s)}))}s(l.arg)}var i;a(this,"_invoke",{value:function(e,n){function a(){return new t((function(t,a){r(e,n,t,a)}))}return i=i?i.then(a,a):a()}})}function O(t,r,n){var a=f;return function(i,o){if(a===y)throw new Error("Generator is already running");if(a===h){if("throw"===i)throw o;return{value:e,done:!0}}for(n.method=i,n.arg=o;;){var s=n.delegate;if(s){var l=L(s,n);if(l){if(l===m)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(a===f)throw a=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a=y;var u=d(t,r,n);if("normal"===u.type){if(a=n.done?h:"suspendedYield",u.arg===m)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(a=h,n.method="throw",n.arg=u.arg)}}}function L(t,r){var n=r.method,a=t.iterator[n];if(a===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,L(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),m;var i=d(a,t.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,m;var o=i.arg;return o?o.done?(r[t.resultName]=o.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,m):o:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,m)}function S(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function F(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function I(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(S,this),this.reset(!0)}function _(t){if(t||""===t){var r=t[o];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,i=function r(){for(;++a<t.length;)if(n.call(t,a))return r.value=t[a],r.done=!1,r;return r.value=e,r.done=!0,r};return i.next=i}}throw new TypeError(typeof t+" is not iterable")}return g.prototype=w,a(N,"constructor",{value:w,configurable:!0}),a(w,"constructor",{value:g,configurable:!0}),g.displayName=u(w,l,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===g||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,w):(e.__proto__=w,u(e,l,"GeneratorFunction")),e.prototype=Object.create(N),e},t.awrap=function(e){return{__await:e}},P(j.prototype),u(j.prototype,s,(function(){return this})),t.AsyncIterator=j,t.async=function(e,r,n,a,i){void 0===i&&(i=Promise);var o=new j(c(e,r,n,a),i);return t.isGeneratorFunction(r)?o:o.next().then((function(e){return e.done?e.value:o.next()}))},P(N),u(N,l,"Generator"),u(N,o,(function(){return this})),u(N,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},t.values=_,I.prototype={constructor:I,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(F),!t)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function a(n,a){return s.type="throw",s.arg=t,r.next=n,a&&(r.method="next",r.arg=e),!!a}for(var i=this.tryEntries.length-1;i>=0;--i){var o=this.tryEntries[i],s=o.completion;if("root"===o.tryLoc)return a("end");if(o.tryLoc<=this.prev){var l=n.call(o,"catchLoc"),u=n.call(o,"finallyLoc");if(l&&u){if(this.prev<o.catchLoc)return a(o.catchLoc,!0);if(this.prev<o.finallyLoc)return a(o.finallyLoc)}else if(l){if(this.prev<o.catchLoc)return a(o.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return a(o.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var i=a;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var o=i?i.completion:{};return o.type=e,o.arg=t,i?(this.method="next",this.next=i.finallyLoc,m):this.complete(o)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),m},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),F(r),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;F(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:_(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),m}},t}function d(e,t,r,n,a,i,o){try{var s=e[i](o),l=s.value}catch(e){return void r(e)}s.done?t(l):Promise.resolve(l).then(n,a)}function f(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function o(e){d(i,n,a,o,s,"next",e)}function s(e){d(i,n,a,o,s,"throw",e)}o(void 0)}))}}var y=[{value:"==",label:"Is"},{value:"!=",label:"Is not"},{value:">",label:"Greater than"},{value:"<",label:"Less than"},{value:"<=",label:"Less than or equal"},{value:">=",label:"Greater than or equal "}];function h(e){if(null==e)throw new Error("Value must not be undefined or null");return e}var m="@plasmicpkgs/plasmic-sanity-io",v=function(e){return"currentSanity"+s.pascalCase(e)+"Item"};function g(e){return i.createClient({projectId:e.projectId,dataset:e.dataset,apiVersion:e.apiVersion?e.apiVersion:"v1",token:e.token,useCdn:e.useCdn})}var w=c.createContext(void 0),b={name:"SanityCredentialsProvider",displayName:"Sanity Credentials Provider",description:"Get your project ID, dataset, and token [here](https://www.sanity.io/manage).\n\nAdd 'https://host.plasmicdev.com' (or your app host origin) as an authorized host in the CORS origins section of your Sanity project.\n\n[See tutorial video](https://www.youtube.com/watch?v=dLeu7I4RsYg).",importName:"SanityCredentialsProvider",importPath:m,props:{projectId:{type:"string",displayName:"Project ID",defaultValueHint:"b2gfz67v",defaultValue:"b2gfz67v",description:"The ID of the project to use."},dataset:{type:"string",displayName:"Dataset",defaultValueHint:"production",defaultValue:"production",description:"The dataset to use."},apiVersion:{type:"string",displayName:"API Version",defaultValueHint:"v1",description:"The API version to use (if not set, 'v1' will be used) - see https://www.sanity.io/docs/js-client#specifying-api-version."},token:{type:"string",displayName:"Token",description:"The token to use (or leave blank for unauthenticated usage) - you can create tokens in the API section of your project (i.e. https://www.sanity.io/manage/personal/project/PROJECT_ID/api#tokens)."},useCdn:{type:"boolean",displayName:"Use CDN?",defaultValueHint:!1,description:"Whether you want to use CDN ('false' if you want to ensure fresh data)."}}};function E(e){return c.createElement(w.Provider,{value:{projectId:e.projectId,dataset:e.dataset,apiVersion:e.apiVersion,token:e.token,useCdn:e.useCdn}},e.children)}var x={name:"SanityFetcher",displayName:"Sanity Fetcher",importName:"SanityFetcher",importPath:m,providesData:!0,description:"Fetches Sanity data of a given collection, and repeats `children` slot content for each row fetched.\n\n[See tutorial video](https://www.youtube.com/watch?v=1SLoVY3hkQ4) and [GROQ cheat sheet](https://www.sanity.io/docs/query-cheat-sheet).",defaultStyles:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr 1fr",gridRowGap:"8px",gridColumnGap:"8px",padding:"8px",maxWidth:"100%"},props:{children:{type:"slot",defaultValue:{type:"vbox",styles:{padding:"8px"},children:{type:"component",name:"SanityField"}}},groq:{type:"string",displayName:"GROQ",description:"Query in GROQ.",defaultValueHint:"*[_type == 'movie']",hidden:function(e){return!e.groq&&!!e.docType}},docType:{type:"choice",options:function(e,t){var r;return null!=(r=null==t?void 0:t.docTypes)?r:[]},displayName:"Document type",description:"Document type to be queried (*[_type == DOC_TYPE] shortcut).",hidden:function(e){return!!e.groq}},filterField:{type:"choice",displayName:"Filter field",description:"Field (from Collection) to filter by",options:function(e,t){var r;return null!=(r=null==t?void 0:t.sanityFields)?r:[]},hidden:function(e,t){return!!e.groq||!e.docType}},filterParameter:{type:"choice",displayName:"Filter Operation",description:"Filter Option to filter by. Read more (https://www.sanity.io/docs/groq-operators#3b7211e976f6)",options:function(e,t){var r;return null!=(r=null==t?void 0:t.queryOptions)?r:[]},hidden:function(e,t){return!!e.groq||!e.filterField}},filterValue:{type:"string",displayName:"Filter value",description:"Value to filter by, should be of filter field type",hidden:function(e,t){return!!e.groq||!e.filterField}},limit:{type:"string",displayName:"Limit",description:"Limit",hidden:function(e){return!!e.groq||!e.docType}},noAutoRepeat:{type:"boolean",displayName:"No auto-repeat",description:"Do not automatically repeat children for every category.",defaultValue:!1},noLayout:{type:"boolean",displayName:"No layout",description:"When set, Sanity Fetcher will not layout its children; instead, the layout set on its parent element will be used. Useful if you want to set flex gap or control container tag type.",defaultValue:!1}}};function N(e){var t,r=e.groq,i=e.docType,s=e.filterField,d=e.filterValue,m=e.filterParameter,b=e.limit,E=e.noAutoRepeat,x=e.children,N=e.className,P=e.noLayout,j=e.setControlContextData,O=new RegExp(/^[-a-z0-9]+$/i),L=new RegExp(/^(~[a-z0-9]{1}[-\w]{0,63}|[a-z0-9]{1}[-\w]{0,63})$/),S=new RegExp(/^\d{4}-\d{2}-\d{2}$/),F=h(u.useContext(w));if(!F.projectId||!O.test(F.projectId))return c.createElement("div",{className:N},"Please specify a valid projectId, it can only contain only a-z, 0-9 and dashes.");if(!F.dataset||!L.test(F.dataset))return c.createElement("div",{className:N},"Please specify a valid dataset, they can only contain lowercase characters, numbers, underscores and dashes, and start with tilde, and be maximum 64 characters.");if(F.apiVersion&&"v1"!==F.apiVersion&&"1"!==F.apiVersion&&"X"!==F.apiVersion){var I=new Date(F.apiVersion);if(!(S.test(F.apiVersion)&&I instanceof Date&&I.getTime()>0))return c.createElement("div",{className:N},"Please specify a valid API version, expected `v1`, `1` or date in format `YYYY-MM-DD`.")}var _=function(e){return e.map((function(e){return e._type})).reduce((function(e,t){return e.includes(t)||e.push(t),e}),[])},C=null!=(t=a.usePlasmicQueryData(JSON.stringify(F)+"/SANITY_DOCTYPES",f(p().mark((function e(){var t;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=g(F),e.next=3,t.fetch("*{_type}").then(_);case 3:return e.abrupt("return",e.sent);case 5:case"end":return e.stop()}}),e)})))).data)&&t,k=!!(i&&s&&m&&d),D=function(){if(r)return console.log("ORIG GROQ",r),r;if(i){var e="*[_type=='"+i+"']";return k?e+="[0...10]":b&&(e+="[0..."+b+"]"),console.log("UNFILTERED GROQ",e),e}return null}(),V=g(F),q=a.usePlasmicQueryData(D?JSON.stringify({fullQuery:D,creds:F}):null,f(p().mark((function e(){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",V.fetch(D));case 1:case"end":return e.stop()}}),e)})))).data,T=function(){if(!k||!q)return null;var e=Object.values(q).flatMap((function(e){return Array.isArray(e)?e:[e]})).map((function(e){var t=Object.entries(e).find((function(e){return e[0]===s}));return null==t?void 0:t[1]})),t="*[_type=='"+i+"'";return t=e.some((function(e){return"string"==typeof e}))?t+" && "+s+" "+m+' "'+d+'"':t+" && "+s+" "+m+" "+d,b?t=t+"][0..."+b+"]":t+="]",console.log("FILTERED GROQ",t),t}(),G=a.usePlasmicQueryData(T?JSON.stringify({filteredQuery:T,creds:F}):null,f(p().mark((function e(){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,V.fetch(T);case 2:return e.abrupt("return",e.sent);case 4:case"end":return e.stop()}}),e)})))).data;if(!C)return c.createElement("div",{className:N},"Please configure the Sanity provider with a valid projectId, dataset, and token (if necessary). Don't forget to add 'https://host.plasmicdev.com' as an authorized host on the CORS origins section of your project.");if(null==j||j({docTypes:C}),!r&&!i)return c.createElement("div",{className:N},"Please specify a valid GROQ query or select a Document type.");if(!q)return c.createElement("div",{className:N},"Loading...");var R,A=q.map((function(e){return Object.keys(e).filter((function(t){var r=l(e,t);return"object"!=typeof r&&"image"!==r._type&&"number"==typeof r||"string"==typeof r&&!r.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/)}))})),Q=Object.values(q).flatMap((function(e){return Array.isArray(e)?e:[e]})).map((function(e){return Object.entries(e).find((function(e){return e[0]===s}))}));if(Object.values(Q).map((function(e){return Array.isArray(e)?e:[e]})).map((function(e){"number"==typeof e[1]&&"object"!=typeof e[1]?R=y:"number"!=typeof e[1]&&"object"!=typeof e[1]&&"string"==typeof e[1]&&(R=[{value:"==",label:"Equals"},{value:"!=",label:"Not equals"}])})),null==j||j({queryOptions:R,docTypes:C,sanityFields:A[0]}),k){if(!m)return c.createElement("div",{className:N},"Please specify a filter operation");if(!d)return c.createElement("div",{className:N},"Please specify a filter value")}if(k&&!G)return c.createElement("div",{className:N},"Loading...");var Y=k?G:q,M=o(V),z=E?x:Y.map((function(e,t){return Object.keys(e).forEach((function(t){"image"===e[t]._type&&(e[t].imgUrl=M.image(e[t]).ignoreImageParams().toString())})),i?c.createElement(n.DataProvider,{key:e._id,name:"sanityItem",data:e,hidden:!0},c.createElement(n.DataProvider,{name:v(i),data:e},n.repeatedElement(t,x))):c.createElement(n.DataProvider,{key:e._id,name:"sanityItem",data:e},n.repeatedElement(t,x))}));return c.createElement(n.DataProvider,{name:"sanityItems",data:Y},P?c.createElement(c.Fragment,null," ",z," "):c.createElement("div",{className:N}," ",z," "))}var P={name:"SanityField",displayName:"Sanity Field",importName:"SanityField",importPath:m,props:{path:{type:"string",displayName:"Path",description:"Field path - see https://www.sanity.io/docs/ids.",defaultValueHint:"castMembers.0._key"},field:{type:"choice",options:function(e,t){var r;return null!=(r=null==t?void 0:t.fields)?r:[]},displayName:"Field",description:"Field to be displayed."}}};function j(e){var t=e.className,r=e.path,a=e.field,i=e.setControlContextData,o=n.useSelector("sanityItem");if(!o)return c.createElement("div",null,"SanityField must be used within a SanityFetcher");var s=Object.keys(o).filter((function(e){var t=l(o,e);return"object"!=typeof t||"image"===t._type}));if(null==i||i({fields:s,isImage:!1}),!r&&!a)return c.createElement("div",null,"Please specify a valid path or select a field.");r||(r=a);var u=l(o,r);return null==i||i({fields:s,isImage:"image"==(null==u?void 0:u._type)}),u?"image"===(null==u?void 0:u._type)?c.createElement("img",{className:t,src:u.imgUrl}):c.createElement("div",{className:t},u):c.createElement("div",null,"Please specify a valid path.")}exports.SanityCredentialsProvider=E,exports.SanityFetcher=N,exports.SanityField=j,exports.ensure=h,exports.registerAll=function(e){var n=function(r,n){e?e.registerComponent(r,n):t(r,n)};e?e.registerGlobalContext(E,b):r(E,b),n(N,x),n(j,P)},exports.sanityCredentialsProviderMeta=b,exports.sanityFetcherMeta=x,exports.sanityFieldMeta=P;
|
|
2
|
-
//# sourceMappingURL=plasmic-sanity-io.cjs.production.min.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plasmic-sanity-io.cjs.production.min.js","sources":["../src/utils.ts","../src/sanity.tsx","../src/index.tsx"],"sourcesContent":["export const filterParameters = [\n {\n value: '==',\n label: 'Is'\n },\n {\n value: '!=',\n label: 'Is not'\n }, {\n value: '>',\n label: 'Greater than'\n }, {\n value: '<',\n label: 'Less than'\n }, {\n value: '<=',\n label: 'Less than or equal'\n },\n {\n value: '>=',\n label: 'Greater than or equal '\n },\n]\n","import {\n ComponentMeta,\n DataProvider,\n GlobalContextMeta,\n repeatedElement,\n useSelector,\n} from \"@plasmicapp/host\";\nimport { usePlasmicQueryData } from \"@plasmicapp/query\";\nimport { createClient } from \"@sanity/client\";\nimport imageUrlBuilder from \"@sanity/image-url\";\nimport { pascalCase } from \"change-case\";\nimport get from \"dlv\";\nimport React, { ReactNode, useContext } from \"react\";\nimport { filterParameters } from \"./utils\";\n\nexport function ensure<T>(x: T | null | undefined): T {\n if (x === null || x === undefined) {\n throw new Error(`Value must not be undefined or null`);\n } else {\n return x;\n }\n}\n\nconst modulePath = \"@plasmicpkgs/plasmic-sanity-io\";\n\nconst makeDataProviderName = (docType: string) =>\n `currentSanity${pascalCase(docType)}Item`;\n\ninterface SanityCredentialsProviderProps {\n projectId?: string;\n dataset?: string;\n apiVersion?: string;\n token?: string;\n useCdn?: boolean;\n}\n\nfunction makeSanityClient(creds: SanityCredentialsProviderProps) {\n const sanity = createClient({\n projectId: creds.projectId,\n dataset: creds.dataset,\n apiVersion: creds.apiVersion ? creds.apiVersion : \"v1\",\n token: creds.token,\n useCdn: creds.useCdn,\n });\n return sanity;\n}\n\nconst CredentialsContext = React.createContext<\n SanityCredentialsProviderProps | undefined\n>(undefined);\n\nexport const sanityCredentialsProviderMeta: GlobalContextMeta<SanityCredentialsProviderProps> =\n {\n name: \"SanityCredentialsProvider\",\n displayName: \"Sanity Credentials Provider\",\n description: `Get your project ID, dataset, and token [here](https://www.sanity.io/manage).\n\nAdd 'https://host.plasmicdev.com' (or your app host origin) as an authorized host in the CORS origins section of your Sanity project.\n\n[See tutorial video](https://www.youtube.com/watch?v=dLeu7I4RsYg).`,\n importName: \"SanityCredentialsProvider\",\n importPath: modulePath,\n props: {\n projectId: {\n type: \"string\",\n displayName: \"Project ID\",\n defaultValueHint: \"b2gfz67v\",\n defaultValue: \"b2gfz67v\",\n description: \"The ID of the project to use.\",\n },\n dataset: {\n type: \"string\",\n displayName: \"Dataset\",\n defaultValueHint: \"production\",\n defaultValue: \"production\",\n description: \"The dataset to use.\",\n },\n apiVersion: {\n type: \"string\",\n displayName: \"API Version\",\n defaultValueHint: \"v1\",\n description:\n \"The API version to use (if not set, 'v1' will be used) - see https://www.sanity.io/docs/js-client#specifying-api-version.\",\n },\n token: {\n type: \"string\",\n displayName: \"Token\",\n description:\n \"The token to use (or leave blank for unauthenticated usage) - you can create tokens in the API section of your project (i.e. https://www.sanity.io/manage/personal/project/PROJECT_ID/api#tokens).\",\n },\n useCdn: {\n type: \"boolean\",\n displayName: \"Use CDN?\",\n defaultValueHint: false,\n description:\n \"Whether you want to use CDN ('false' if you want to ensure fresh data).\",\n },\n },\n };\n\nexport function SanityCredentialsProvider({\n projectId,\n dataset,\n apiVersion,\n token,\n useCdn,\n children,\n}: React.PropsWithChildren<SanityCredentialsProviderProps>) {\n return (\n <CredentialsContext.Provider\n value={{ projectId, dataset, apiVersion, token, useCdn }}\n >\n {children}\n </CredentialsContext.Provider>\n );\n}\n\ninterface SanityFetcherProps {\n groq?: string;\n docType: string;\n filterField?: string;\n filterValue?: string;\n filterParameter?: string;\n noAutoRepeat?: boolean;\n limit?: string;\n children?: ReactNode;\n className?: string;\n noLayout?: boolean;\n setControlContextData?: (data: {\n docTypes?: string[];\n sanityFields?: string[];\n queryOptions?: [];\n }) => void;\n}\n\nexport const sanityFetcherMeta: ComponentMeta<SanityFetcherProps> = {\n name: \"SanityFetcher\",\n displayName: \"Sanity Fetcher\",\n importName: \"SanityFetcher\",\n importPath: modulePath,\n providesData: true,\n description: `Fetches Sanity data of a given collection, and repeats \\`children\\` slot content for each row fetched.\n\n[See tutorial video](https://www.youtube.com/watch?v=1SLoVY3hkQ4) and [GROQ cheat sheet](https://www.sanity.io/docs/query-cheat-sheet).`,\n defaultStyles: {\n display: \"grid\",\n gridTemplateColumns: \"1fr 1fr 1fr 1fr\",\n gridRowGap: \"8px\",\n gridColumnGap: \"8px\",\n padding: \"8px\",\n maxWidth: \"100%\",\n },\n props: {\n children: {\n type: \"slot\",\n defaultValue: {\n type: \"vbox\",\n styles: {\n padding: \"8px\",\n },\n children: {\n type: \"component\",\n name: \"SanityField\",\n },\n },\n },\n groq: {\n type: \"string\",\n displayName: \"GROQ\",\n description: \"Query in GROQ.\",\n defaultValueHint: \"*[_type == 'movie']\",\n // Hide this if there's no groq, AND there's docType, so we're in\n // \"docType\" mode\n hidden: (props) => !props.groq && !!props.docType,\n },\n docType: {\n type: \"choice\",\n options: (props, ctx) => {\n return ctx?.docTypes ?? [];\n },\n displayName: \"Document type\",\n description:\n \"Document type to be queried (*[_type == DOC_TYPE] shortcut).\",\n // Hide this if groq is specified, as groq always takes precedence\n hidden: (props) => !!props.groq,\n },\n filterField: {\n type: \"choice\",\n displayName: \"Filter field\",\n description: \"Field (from Collection) to filter by\",\n options: (props, ctx) => ctx?.sanityFields ?? [],\n // Hide this if there's groq (so we're just using groq), or if there's\n // no docType selected yet\n hidden: (props, ctx) => !!props.groq || !props.docType,\n },\n filterParameter: {\n type: \"choice\",\n displayName: \"Filter Operation\",\n description:\n \"Filter Option to filter by. Read more (https://www.sanity.io/docs/groq-operators#3b7211e976f6)\",\n options: (props, ctx) => ctx?.queryOptions ?? [],\n // Hide if in groq mode, or if no filter field is selected yet\n hidden: (props, ctx) => !!props.groq || !props.filterField,\n },\n filterValue: {\n type: \"string\",\n displayName: \"Filter value\",\n description: \"Value to filter by, should be of filter field type\",\n // Hide if in groq mode, or if no filter field is selected yet\n hidden: (props, ctx) => !!props.groq || !props.filterField,\n },\n limit: {\n type: \"string\",\n displayName: \"Limit\",\n description: \"Limit\",\n // Hide if in groq mode\n hidden: (props) => !!props.groq || !props.docType,\n },\n noAutoRepeat: {\n type: \"boolean\",\n displayName: \"No auto-repeat\",\n description: \"Do not automatically repeat children for every category.\",\n defaultValue: false,\n },\n noLayout: {\n type: \"boolean\",\n displayName: \"No layout\",\n description:\n \"When set, Sanity Fetcher will not layout its children; instead, the layout set on its parent element will be used. Useful if you want to set flex gap or control container tag type.\",\n defaultValue: false,\n },\n },\n};\n\nexport function SanityFetcher({\n groq,\n docType,\n filterField,\n filterValue,\n filterParameter,\n limit,\n noAutoRepeat,\n children,\n className,\n noLayout,\n\n setControlContextData,\n}: SanityFetcherProps) {\n const projectIdRegex = new RegExp(/^[-a-z0-9]+$/i);\n const datasetRegex = new RegExp(\n /^(~[a-z0-9]{1}[-\\w]{0,63}|[a-z0-9]{1}[-\\w]{0,63})$/\n );\n const dateRegex = new RegExp(/^\\d{4}-\\d{2}-\\d{2}$/);\n\n const creds = ensure(useContext(CredentialsContext));\n\n if (!creds.projectId || !projectIdRegex.test(creds.projectId)) {\n return (\n <div className={className}>\n Please specify a valid projectId, it can only contain only a-z, 0-9 and\n dashes.\n </div>\n );\n } else if (!creds.dataset || !datasetRegex.test(creds.dataset)) {\n return (\n <div className={className}>\n Please specify a valid dataset, they can only contain lowercase\n characters, numbers, underscores and dashes, and start with tilde, and\n be maximum 64 characters.\n </div>\n );\n } else if (creds.apiVersion) {\n if (\n creds.apiVersion !== \"v1\" &&\n creds.apiVersion !== \"1\" &&\n creds.apiVersion !== \"X\"\n ) {\n const date = new Date(creds.apiVersion);\n if (\n !(\n dateRegex.test(creds.apiVersion) &&\n date instanceof Date &&\n date.getTime() > 0\n )\n ) {\n return (\n <div className={className}>\n Please specify a valid API version, expected `v1`, `1` or date in\n format `YYYY-MM-DD`.\n </div>\n );\n }\n }\n }\n\n const filterUniqueDocTypes = (records: { _type: string }[]): string[] =>\n records\n .map((record) => record._type)\n .reduce((acc, type) => {\n if (!acc.includes(type)) {\n acc.push(type);\n }\n return acc;\n }, [] as string[]);\n\n const allDataTypes = usePlasmicQueryData<any[] | null>(\n JSON.stringify(creds) + \"/SANITY_DOCTYPES\",\n async () => {\n const sanity = makeSanityClient(creds);\n const resp = await sanity.fetch(\"*{_type}\").then(filterUniqueDocTypes);\n return resp;\n }\n );\n const docTypes = allDataTypes.data ?? false;\n\n const hasFilter =\n !!docType && !!filterField && !!filterParameter && !!filterValue;\n\n const generateUnfilteredGroq = () => {\n if (groq) {\n console.log(\"ORIG GROQ\", groq);\n return groq;\n } else if (docType) {\n let query = `*[_type=='${docType}']`;\n if (hasFilter) {\n // Ask for only a small sample, so we know how to generate the filter\n query += `[0...10]`;\n } else if (limit) {\n query += `[0...${limit}]`;\n }\n console.log(\"UNFILTERED GROQ\", query);\n return query;\n } else {\n return null;\n }\n };\n\n const unfilteredQuery = generateUnfilteredGroq();\n\n const sanity = makeSanityClient(creds);\n\n const { data: unfilteredData } = usePlasmicQueryData<any[] | null>(\n unfilteredQuery\n ? JSON.stringify({ fullQuery: unfilteredQuery, creds })\n : null,\n async () => {\n return sanity.fetch(unfilteredQuery!);\n }\n );\n\n const generateFilteredQuery = () => {\n if (!hasFilter || !unfilteredData) {\n return null;\n }\n\n const fieldValues = Object.values(unfilteredData)\n .flatMap((model: any) => (Array.isArray(model) ? model : [model]))\n .map((item: any) => {\n const field = Object.entries(item).find((el) => el[0] === filterField);\n return field?.[1];\n });\n\n let query = `*[_type=='${docType}'`;\n\n if (fieldValues.some((v) => typeof v === \"string\")) {\n query = `${query} && ${filterField} ${filterParameter} \"${filterValue}\"`;\n } else {\n query = `${query} && ${filterField} ${filterParameter} ${filterValue}`;\n }\n\n if (limit) {\n query = `${query}][0...${limit}]`;\n } else {\n query = `${query}]`;\n }\n console.log(\"FILTERED GROQ\", query);\n return query;\n };\n\n const filteredQuery = generateFilteredQuery();\n const { data: filteredData } = usePlasmicQueryData<any[] | null>(\n filteredQuery ? JSON.stringify({ filteredQuery, creds }) : null,\n async () => {\n const resp = await sanity.fetch(filteredQuery!);\n return resp;\n }\n );\n\n if (!docTypes) {\n return (\n <div className={className}>\n Please configure the Sanity provider with a valid projectId, dataset,\n and token (if necessary). Don't forget to add\n 'https://host.plasmicdev.com' as an authorized host on the CORS origins\n section of your project.\n </div>\n );\n }\n\n setControlContextData?.({\n docTypes,\n });\n\n if (!groq && !docType) {\n return (\n <div className={className}>\n Please specify a valid GROQ query or select a Document type.\n </div>\n );\n }\n\n if (!unfilteredData) {\n return <div className={className}>Loading...</div>;\n }\n\n let sanityFields = unfilteredData.map((item) => {\n const fields = Object.keys(item).filter((field) => {\n const value = get(item, field);\n return (\n (typeof value !== \"object\" &&\n value._type !== \"image\" &&\n typeof value === \"number\") ||\n (typeof value === \"string\" &&\n !value.match(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$/))\n );\n });\n\n return fields;\n });\n\n let operators;\n\n const matchedFields = Object.values(unfilteredData)\n .flatMap((model: any) => (Array.isArray(model) ? model : [model]))\n .map((item: any) => {\n const fields = Object.entries(item).find((el) => el[0] === filterField);\n return fields;\n });\n\n Object.values(matchedFields)\n .map((model: any) => (Array.isArray(model) ? model : [model]))\n .map((item: any) => {\n if (typeof item[1] === \"number\" && typeof item[1] !== \"object\") {\n operators = filterParameters;\n } else if (\n typeof item[1] !== \"number\" &&\n typeof item[1] !== \"object\" &&\n typeof item[1] === \"string\"\n ) {\n operators = [\n {\n value: \"==\",\n label: \"Equals\",\n },\n {\n value: \"!=\",\n label: \"Not equals\",\n },\n ];\n }\n });\n\n setControlContextData?.({\n queryOptions: operators,\n docTypes,\n sanityFields: sanityFields[0]!,\n });\n\n if (hasFilter) {\n if (!filterParameter) {\n return <div className={className}>Please specify a filter operation</div>;\n }\n if (!filterValue) {\n return <div className={className}>Please specify a filter value</div>;\n }\n }\n\n if (hasFilter && !filteredData) {\n return <div className={className}>Loading...</div>;\n }\n\n const resultData = hasFilter ? filteredData! : unfilteredData;\n\n const imageBuilder = imageUrlBuilder(sanity);\n const repElements = noAutoRepeat\n ? children\n : resultData.map((item, index) => {\n Object.keys(item).forEach((field) => {\n if (item[field]._type === \"image\") {\n item[field].imgUrl = imageBuilder\n .image(item[field])\n .ignoreImageParams()\n .toString();\n }\n });\n\n return docType ? (\n <DataProvider\n key={item._id}\n name={\"sanityItem\"}\n data={item}\n hidden={true}\n >\n <DataProvider name={makeDataProviderName(docType)} data={item}>\n {repeatedElement(index, children)}\n </DataProvider>\n </DataProvider>\n ) : (\n <DataProvider key={item._id} name={\"sanityItem\"} data={item}>\n {repeatedElement(index, children)}\n </DataProvider>\n );\n });\n\n return (\n <DataProvider name=\"sanityItems\" data={resultData}>\n {noLayout ? (\n <> {repElements} </>\n ) : (\n <div className={className}> {repElements} </div>\n )}\n </DataProvider>\n );\n}\n\ninterface SanityFieldProps {\n className?: string;\n path?: string;\n field?: string;\n setControlContextData?: (data: {\n fields: string[];\n isImage: boolean;\n }) => void;\n}\n\nexport const sanityFieldMeta: ComponentMeta<SanityFieldProps> = {\n name: \"SanityField\",\n displayName: \"Sanity Field\",\n importName: \"SanityField\",\n importPath: modulePath,\n props: {\n path: {\n type: \"string\",\n displayName: \"Path\",\n description: \"Field path - see https://www.sanity.io/docs/ids.\",\n defaultValueHint: \"castMembers.0._key\",\n },\n field: {\n type: \"choice\",\n options: (props, ctx) => {\n return ctx?.fields ?? [];\n },\n displayName: \"Field\",\n description: \"Field to be displayed.\",\n },\n },\n};\n\nexport function SanityField({\n className,\n path,\n field,\n setControlContextData,\n}: SanityFieldProps) {\n const item = useSelector(\"sanityItem\");\n if (!item) {\n return <div>SanityField must be used within a SanityFetcher</div>;\n }\n\n // Getting only fields that aren't objects\n const displayableFields = Object.keys(item).filter((field) => {\n const value = get(item, field);\n return typeof value !== \"object\" || value._type === \"image\";\n });\n setControlContextData?.({\n fields: displayableFields,\n isImage: false,\n });\n\n if (!path && !field) {\n return <div>Please specify a valid path or select a field.</div>;\n }\n\n if (!path) {\n path = field;\n }\n\n const data = get(item, path as string);\n\n setControlContextData?.({\n fields: displayableFields,\n isImage: data?._type == \"image\",\n });\n\n if (!data) {\n return <div>Please specify a valid path.</div>;\n } else if (data?._type === \"image\") {\n return <img className={className} src={data.imgUrl} />;\n } else {\n return <div className={className}>{data}</div>;\n }\n}\n","import registerComponent, {\n ComponentMeta,\n} from \"@plasmicapp/host/registerComponent\";\nimport registerGlobalContext from \"@plasmicapp/host/registerGlobalContext\";\nimport {\n SanityCredentialsProvider,\n sanityCredentialsProviderMeta,\n SanityFetcher,\n sanityFetcherMeta,\n SanityField,\n sanityFieldMeta,\n} from \"./sanity\";\n\n\nexport function registerAll(loader?: {\n registerComponent: typeof registerComponent;\n registerGlobalContext: typeof registerGlobalContext;\n}) {\n const _registerComponent = <T extends React.ComponentType<any>>(\n Component: T,\n defaultMeta: ComponentMeta<React.ComponentProps<T>>\n ) => {\n if (loader) {\n loader.registerComponent(Component, defaultMeta);\n } else {\n registerComponent(Component, defaultMeta);\n }\n };\n\n if (loader) {\n loader.registerGlobalContext(SanityCredentialsProvider, sanityCredentialsProviderMeta);\n } else {\n registerGlobalContext(SanityCredentialsProvider, sanityCredentialsProviderMeta);\n }\n\n _registerComponent(SanityFetcher, sanityFetcherMeta);\n _registerComponent(SanityField, sanityFieldMeta);\n}\n\nexport * from \"./sanity\";"],"names":["filterParameters","value","label","ensure","x","Error","modulePath","makeDataProviderName","docType","pascalCase","makeSanityClient","creds","createClient","projectId","dataset","apiVersion","token","useCdn","CredentialsContext","React","createContext","undefined","sanityCredentialsProviderMeta","name","displayName","description","importName","importPath","props","type","defaultValueHint","defaultValue","SanityCredentialsProvider","_ref","Provider","children","sanityFetcherMeta","providesData","defaultStyles","display","gridTemplateColumns","gridRowGap","gridColumnGap","padding","maxWidth","styles","groq","hidden","options","ctx","_ctx$docTypes","docTypes","filterField","_ctx$sanityFields","sanityFields","filterParameter","_ctx$queryOptions","queryOptions","filterValue","limit","noAutoRepeat","noLayout","SanityFetcher","_ref2","className","setControlContextData","projectIdRegex","RegExp","datasetRegex","dateRegex","useContext","test","date","Date","getTime","filterUniqueDocTypes","records","map","record","_type","reduce","acc","includes","push","_allDataTypes$data","usePlasmicQueryData","JSON","stringify","_asyncToGenerator","_regeneratorRuntime","mark","_callee","sanity","wrap","_context","prev","next","fetch","then","abrupt","sent","stop","data","hasFilter","unfilteredQuery","console","log","query","generateUnfilteredGroq","unfilteredData","fullQuery","_callee2","_context2","filteredQuery","fieldValues","Object","values","flatMap","model","Array","isArray","item","field","entries","find","el","some","v","generateFilteredQuery","filteredData","_callee3","_context3","operators","keys","filter","get","match","matchedFields","resultData","imageBuilder","imageUrlBuilder","repElements","index","forEach","imgUrl","image","ignoreImageParams","toString","DataProvider","key","_id","repeatedElement","sanityFieldMeta","path","_ctx$fields","fields","SanityField","_ref6","useSelector","displayableFields","isImage","src","loader","_registerComponent","Component","defaultMeta","registerComponent","registerGlobalContext"],"mappings":"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"}
|