@sanity/language-filter 0.147.10-ts-client.1 → 1.0.0-firstpass-v3-impl.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.
@@ -0,0 +1,329 @@
1
+ import {jsx as $gGrEF$jsx, jsxs as $gGrEF$jsxs, Fragment as $gGrEF$Fragment} from "react/jsx-runtime";
2
+ import {useMemo as $gGrEF$useMemo, useCallback as $gGrEF$useCallback, useState as $gGrEF$useState} from "react";
3
+ import {createPlugin as $gGrEF$createPlugin} from "sanity";
4
+ import {ObjectInput as $gGrEF$ObjectInput} from "sanity/form";
5
+ import {usePaneRouter as $gGrEF$usePaneRouter} from "sanity/desk";
6
+ import {TranslateIcon as $gGrEF$TranslateIcon} from "@sanity/icons";
7
+ import {useClickOutside as $gGrEF$useClickOutside, Box as $gGrEF$Box, Card as $gGrEF$Card, Stack as $gGrEF$Stack, Text as $gGrEF$Text, Flex as $gGrEF$Flex, Checkbox as $gGrEF$Checkbox, Popover as $gGrEF$Popover, Button as $gGrEF$Button} from "@sanity/ui";
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+ // NOTE: use `+` instead of `,` since the desk tool URL format already uses comma
18
+ const $8ca77f8ec29d117e$var$LANG_ID_SEPARATOR = "+";
19
+ function $8ca77f8ec29d117e$export$cd56401a2a088ead(props) {
20
+ const { options: options } = props;
21
+ const { params: params , setParams: setParams } = (0, $gGrEF$usePaneRouter)();
22
+ const { supportedLanguages: supportedLanguages , defaultLanguages: defaultLanguages } = options;
23
+ const selectableLanguages = (0, $gGrEF$useMemo)(()=>supportedLanguages.filter((lang)=>!defaultLanguages?.includes(lang.id)), [
24
+ supportedLanguages,
25
+ defaultLanguages
26
+ ]);
27
+ const selectedLanguages = (0, $gGrEF$useMemo)(()=>{
28
+ if (params?.langs === "$none") return [];
29
+ if (params?.langs === "$all") return selectableLanguages.map((lang)=>lang.id);
30
+ return params?.langs?.split($8ca77f8ec29d117e$var$LANG_ID_SEPARATOR) || selectableLanguages.map((lang)=>lang.id);
31
+ }, [
32
+ params,
33
+ selectableLanguages
34
+ ]);
35
+ const selectAll = (0, $gGrEF$useCallback)(()=>{
36
+ setParams({
37
+ ...params,
38
+ langs: "$all"
39
+ });
40
+ }, [
41
+ params,
42
+ setParams
43
+ ]);
44
+ const selectNone = (0, $gGrEF$useCallback)(()=>{
45
+ setParams({
46
+ ...params,
47
+ langs: "$none"
48
+ });
49
+ }, [
50
+ params,
51
+ setParams
52
+ ]);
53
+ const toggleLanguage = (0, $gGrEF$useCallback)((languageId)=>{
54
+ let lang = selectedLanguages;
55
+ if (lang.includes(languageId)) lang = lang.filter((l)=>l !== languageId);
56
+ else lang = [
57
+ ...lang,
58
+ languageId
59
+ ];
60
+ if (lang.length === 0) {
61
+ setParams({
62
+ ...params,
63
+ langs: "$none"
64
+ }) // none
65
+ ;
66
+ return;
67
+ }
68
+ if (lang.length === selectableLanguages.length) {
69
+ setParams({
70
+ ...params,
71
+ langs: "$all"
72
+ });
73
+ return;
74
+ }
75
+ setParams({
76
+ ...params,
77
+ langs: lang.join($8ca77f8ec29d117e$var$LANG_ID_SEPARATOR)
78
+ });
79
+ }, [
80
+ params,
81
+ selectableLanguages,
82
+ selectedLanguages,
83
+ setParams
84
+ ]);
85
+ const visibleLanguages = (0, $gGrEF$useMemo)(()=>[
86
+ ...defaultLanguages ?? [],
87
+ ...selectedLanguages
88
+ ], [
89
+ defaultLanguages,
90
+ selectedLanguages
91
+ ]);
92
+ return {
93
+ visibleLanguages: visibleLanguages,
94
+ allSelected: selectedLanguages.length === selectableLanguages.length,
95
+ selectAll: selectAll,
96
+ selectNone: selectNone,
97
+ toggleLanguage: toggleLanguage
98
+ };
99
+ }
100
+
101
+
102
+ const $40fa05cab0bde0d4$export$373781be62a9896e = (enclosingType, field, selectedLanguageIds)=>!enclosingType.name.startsWith("locale") || selectedLanguageIds.includes(field.name);
103
+ function $40fa05cab0bde0d4$export$fe9baa09973dbf22(schemaType, options) {
104
+ const schemaFilter = $40fa05cab0bde0d4$var$isDocument(schemaType) && schemaType?.options?.languageFilter;
105
+ const defaultEnabled = !options.documentTypes;
106
+ return !!(defaultEnabled && schemaFilter !== false || !defaultEnabled && schemaFilter || schemaType && options.documentTypes?.includes(schemaType.name));
107
+ }
108
+ function $40fa05cab0bde0d4$var$isDocument(schemaType) {
109
+ return schemaType?.jsonType === "object" && $40fa05cab0bde0d4$var$getRootType(schemaType).name === "document";
110
+ }
111
+ function $40fa05cab0bde0d4$var$getRootType(schema) {
112
+ if (schema.type) return $40fa05cab0bde0d4$var$getRootType(schema.type);
113
+ return schema;
114
+ }
115
+
116
+
117
+ function $f69da2f7cb45fe3f$export$7f9ce1f19dc34df5(props) {
118
+ const { members: membersProp , level: level , options: options , path: path , schemaType: schemaType , ...restProps } = props;
119
+ const { visibleLanguages: visibleLanguages } = (0, $8ca77f8ec29d117e$export$cd56401a2a088ead)({
120
+ options: options
121
+ });
122
+ const filterField = options.filterField ?? (0, $40fa05cab0bde0d4$export$373781be62a9896e);
123
+ const members = (0, $gGrEF$useMemo)(()=>{
124
+ return membersProp.filter((member)=>member.kind === "field" && filterField(schemaType, member, visibleLanguages) || member.kind === "fieldSet" && filterField(schemaType, member.fieldSet, visibleLanguages));
125
+ }, [
126
+ schemaType,
127
+ membersProp,
128
+ filterField,
129
+ visibleLanguages
130
+ ]);
131
+ return /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$ObjectInput), {
132
+ ...restProps,
133
+ level: level,
134
+ members: members,
135
+ path: path,
136
+ schemaType: schemaType
137
+ });
138
+ }
139
+
140
+
141
+
142
+
143
+
144
+
145
+
146
+ function $4566079f8642bc3e$export$85fc605f11895007(props) {
147
+ const { options: options } = props;
148
+ const defaultLanguages = options.supportedLanguages.filter((l)=>options.defaultLanguages?.includes(l.id));
149
+ const languageOptions = options.supportedLanguages.filter((l)=>!options.defaultLanguages?.includes(l.id));
150
+ const [open, setOpen] = (0, $gGrEF$useState)(false);
151
+ const { visibleLanguages: visibleLanguages , allSelected: allSelected , selectAll: selectAll , selectNone: selectNone , toggleLanguage: toggleLanguage } = (0, $8ca77f8ec29d117e$export$cd56401a2a088ead)({
152
+ options: options
153
+ });
154
+ const [button, setButton] = (0, $gGrEF$useState)(null);
155
+ const [popover, setPopover] = (0, $gGrEF$useState)(null);
156
+ const handleToggleAll = (0, $gGrEF$useCallback)((event)=>{
157
+ const checked = event.currentTarget.checked;
158
+ if (checked) selectAll();
159
+ else selectNone();
160
+ }, [
161
+ selectAll,
162
+ selectNone
163
+ ]);
164
+ const handleClick = (0, $gGrEF$useCallback)(()=>setOpen((o)=>!o), []);
165
+ const handleClickOutside = (0, $gGrEF$useCallback)(()=>setOpen(false), []);
166
+ (0, $gGrEF$useClickOutside)(handleClickOutside, [
167
+ button,
168
+ popover
169
+ ]);
170
+ const content = /*#__PURE__*/ (0, $gGrEF$jsxs)((0, $gGrEF$Box), {
171
+ overflow: "auto",
172
+ padding: 1,
173
+ children: [
174
+ defaultLanguages.length > 0 && /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Card), {
175
+ radius: 2,
176
+ tone: "primary",
177
+ children: /*#__PURE__*/ (0, $gGrEF$jsxs)((0, $gGrEF$Stack), {
178
+ padding: 2,
179
+ space: 3,
180
+ children: [
181
+ /*#__PURE__*/ (0, $gGrEF$jsxs)((0, $gGrEF$Text), {
182
+ size: 1,
183
+ weight: "semibold",
184
+ children: [
185
+ "Default language",
186
+ defaultLanguages.length > 1 && /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Fragment), {
187
+ children: "s"
188
+ })
189
+ ]
190
+ }),
191
+ defaultLanguages.map((l)=>/*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Text), {
192
+ children: l.title
193
+ }, l.id))
194
+ ]
195
+ })
196
+ }),
197
+ /*#__PURE__*/ (0, $gGrEF$jsxs)((0, $gGrEF$Stack), {
198
+ marginTop: 3,
199
+ padding: 2,
200
+ space: 2,
201
+ children: [
202
+ /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Box), {
203
+ paddingBottom: 1,
204
+ children: /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Text), {
205
+ size: 1,
206
+ weight: "semibold",
207
+ children: "Show translations"
208
+ })
209
+ }),
210
+ /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Card), {
211
+ as: "label",
212
+ children: /*#__PURE__*/ (0, $gGrEF$jsxs)((0, $gGrEF$Flex), {
213
+ align: "center",
214
+ gap: 2,
215
+ children: [
216
+ /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Checkbox), {
217
+ checked: allSelected,
218
+ name: "_allSelected",
219
+ onChange: handleToggleAll
220
+ }),
221
+ /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Box), {
222
+ flex: 1,
223
+ children: /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Text), {
224
+ muted: !allSelected,
225
+ weight: "semibold",
226
+ children: "All translations"
227
+ })
228
+ })
229
+ ]
230
+ })
231
+ }),
232
+ languageOptions.map((lang)=>/*#__PURE__*/ (0, $gGrEF$jsx)($4566079f8642bc3e$var$LanguageFilterOption, {
233
+ id: lang.id,
234
+ onToggle: toggleLanguage,
235
+ selected: visibleLanguages.includes(lang.id),
236
+ title: lang.title
237
+ }, lang.id))
238
+ ]
239
+ })
240
+ ]
241
+ });
242
+ return /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Popover), {
243
+ constrainSize: true,
244
+ content: content,
245
+ open: open,
246
+ portal: true,
247
+ ref: setPopover,
248
+ children: /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Button), {
249
+ icon: (0, $gGrEF$TranslateIcon),
250
+ text: `Filter languages (${visibleLanguages.length}/${options.supportedLanguages.length})`,
251
+ mode: "bleed",
252
+ onClick: handleClick,
253
+ ref: setButton,
254
+ selected: open
255
+ })
256
+ });
257
+ }
258
+ function $4566079f8642bc3e$var$LanguageFilterOption(props) {
259
+ const { id: id , onToggle: onToggle , selected: selected , title: title } = props;
260
+ const handleChange = (0, $gGrEF$useCallback)(()=>{
261
+ onToggle(id);
262
+ }, [
263
+ id,
264
+ onToggle
265
+ ]);
266
+ return /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Card), {
267
+ as: "label",
268
+ children: /*#__PURE__*/ (0, $gGrEF$jsxs)((0, $gGrEF$Flex), {
269
+ align: "center",
270
+ gap: 2,
271
+ children: [
272
+ /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Checkbox), {
273
+ checked: selected,
274
+ name: `language-${id}`,
275
+ onChange: handleChange
276
+ }),
277
+ /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Box), {
278
+ flex: 1,
279
+ children: /*#__PURE__*/ (0, $gGrEF$jsx)((0, $gGrEF$Text), {
280
+ muted: !selected,
281
+ children: title
282
+ })
283
+ })
284
+ ]
285
+ })
286
+ });
287
+ }
288
+
289
+
290
+
291
+ const $91a08798d183e77b$export$bae498c4212cce68 = (0, $gGrEF$createPlugin)((options)=>{
292
+ const RenderLanguageFilter = ()=>{
293
+ return /*#__PURE__*/ (0, $gGrEF$jsx)((0, $4566079f8642bc3e$export$85fc605f11895007), {
294
+ options: options
295
+ });
296
+ };
297
+ return {
298
+ name: "@sanity/language-filter",
299
+ document: {
300
+ unstable_languageFilter: (prev, { schemaType: schemaType , schema: schema })=>{
301
+ if ((0, $40fa05cab0bde0d4$export$fe9baa09973dbf22)(schema.get(schemaType), options)) return [
302
+ ...prev,
303
+ RenderLanguageFilter
304
+ ];
305
+ return prev;
306
+ }
307
+ },
308
+ form: {
309
+ renderInput (props, next) {
310
+ const enabled = (0, $40fa05cab0bde0d4$export$fe9baa09973dbf22)(props.schemaType, options);
311
+ if (enabled && props.schemaType.jsonType === "object") return /*#__PURE__*/ (0, $gGrEF$jsx)((0, $f69da2f7cb45fe3f$export$7f9ce1f19dc34df5), {
312
+ ...props,
313
+ options: options
314
+ });
315
+ return next(props);
316
+ }
317
+ }
318
+ };
319
+ });
320
+
321
+
322
+
323
+
324
+
325
+
326
+
327
+
328
+ export {$91a08798d183e77b$export$bae498c4212cce68 as languageFilter, $40fa05cab0bde0d4$export$373781be62a9896e as defaultFilterField, $40fa05cab0bde0d4$export$fe9baa09973dbf22 as isLanguageFilterEnabled, $f69da2f7cb45fe3f$export$7f9ce1f19dc34df5 as LanguageFilterObjectInput, $4566079f8642bc3e$export$85fc605f11895007 as LanguageFilterMenuButton, $8ca77f8ec29d117e$export$cd56401a2a088ead as usePaneLanguages};
329
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["src/index.ts","src/plugin.tsx","src/LanguageFilterObjectInput.tsx","src/usePaneLanguages.ts","src/filterField.ts","src/LanguageFilterMenuButton.tsx"],"sourcesContent":["/**\n * Plugin function\n */\nexport {languageFilter} from './plugin'\n\nexport {defaultFilterField, isLanguageFilterEnabled} from './filterField'\n\nexport type {\n LanguageFilterConfig,\n LanguageFilterSchema,\n LanguageFilterOptions,\n FilterFieldFunction,\n Language,\n} from './types'\n\nexport {\n LanguageFilterObjectInput,\n type LanguageFilterObjectInputProps,\n} from './LanguageFilterObjectInput'\n\nexport {\n LanguageFilterMenuButton,\n type LanguageFilterMenuButtonProps,\n} from './LanguageFilterMenuButton'\n\nexport {usePaneLanguages} from './usePaneLanguages'\n","import React from 'react'\nimport {_DocumentLanguageFilterComponent, createPlugin, ObjectInputProps} from 'sanity'\nimport {LanguageFilterObjectInput} from './LanguageFilterObjectInput'\nimport {LanguageFilterMenuButton} from './LanguageFilterMenuButton'\nimport {LanguageFilterConfig} from './types'\nimport {isLanguageFilterEnabled} from './filterField'\n\n/**\n * ## Usage in sanity.config.ts (or .js)\n *\n * ```\n * import {createConfig} from 'sanity'\n * import {languageFilter} from '@sanity/language-filter'\n *\n * export const createConfig({\n * /...\n * plugins: [\n * languageFilter({\n * supportedLanguages: [\n * {id: 'nb', title: 'Norwegian (Bokmål)'},\n * {id: 'nn', title: 'Norwegian (Nynorsk)'},\n * {id: 'en', title: 'English'},\n * {id: 'es', title: 'Spanish'},\n * {id: 'arb', title: 'Arabic'},\n * {id: 'pt', title: 'Portuguese'},\n * //...\n * ],\n * // Select Norwegian (Bokmål) by default\n * defaultLanguages: ['nb'],\n * // Only show language filter for document type `page` (schemaType.name)\n * // Can also enable via document-options: options.languageFilter: true\n * documentTypes: ['page'],\n * // default filter function shown\n * filterField: (enclosingType, field, selectedLanguageIds) =>\n * !enclosingType.name.startsWith('locale') || selectedLanguageIds.includes(field.name),\n * })\n * ]\n * })\n * ```\n */\nexport const languageFilter = createPlugin<LanguageFilterConfig>((options) => {\n const RenderLanguageFilter: _DocumentLanguageFilterComponent = () => {\n return <LanguageFilterMenuButton options={options} />\n }\n\n return {\n name: '@sanity/language-filter',\n document: {\n unstable_languageFilter: (prev, {schemaType, schema}) => {\n if (isLanguageFilterEnabled(schema.get(schemaType), options)) {\n return [...prev, RenderLanguageFilter]\n }\n return prev\n },\n },\n\n form: {\n renderInput(props, next) {\n const enabled = isLanguageFilterEnabled(props.schemaType, options)\n if (enabled && props.schemaType.jsonType === 'object') {\n return <LanguageFilterObjectInput {...(props as ObjectInputProps)} options={options} />\n }\n return next(props)\n },\n },\n }\n})\n","import React, {useMemo} from 'react'\nimport {ObjectInputProps, ObjectMember} from 'sanity'\nimport {ObjectInput} from 'sanity/form'\nimport {usePaneLanguages} from './usePaneLanguages'\nimport {LanguageFilterConfig} from './types'\nimport {defaultFilterField} from './filterField'\n\nexport type LanguageFilterObjectInputProps = {options: LanguageFilterConfig} & ObjectInputProps\n\nexport function LanguageFilterObjectInput(props: LanguageFilterObjectInputProps) {\n const {members: membersProp, level, options, path, schemaType, ...restProps} = props\n const {visibleLanguages} = usePaneLanguages({options})\n\n const filterField = options.filterField ?? defaultFilterField\n\n const members: ObjectMember[] = useMemo(() => {\n return membersProp.filter(\n (member) =>\n (member.kind === 'field' && filterField(schemaType, member, visibleLanguages)) ||\n (member.kind === 'fieldSet' && filterField(schemaType, member.fieldSet, visibleLanguages))\n )\n }, [schemaType, membersProp, filterField, visibleLanguages])\n\n return (\n <ObjectInput\n {...restProps}\n level={level}\n members={members}\n path={path}\n schemaType={schemaType}\n />\n )\n}\n","import {useCallback, useMemo} from 'react'\nimport {usePaneRouter} from 'sanity/desk'\nimport {LanguageFilterConfig} from './types'\n\n// NOTE: use `+` instead of `,` since the desk tool URL format already uses comma\nconst LANG_ID_SEPARATOR = '+'\n\nexport function usePaneLanguages(props: {options: LanguageFilterConfig}): {\n visibleLanguages: string[]\n allSelected: boolean\n selectAll: () => void\n selectNone: () => void\n toggleLanguage: (languageId: string) => void\n} {\n const {options} = props\n const {params, setParams} = usePaneRouter()\n const {supportedLanguages, defaultLanguages} = options\n\n const selectableLanguages = useMemo(\n () => supportedLanguages.filter((lang) => !defaultLanguages?.includes(lang.id)),\n [supportedLanguages, defaultLanguages]\n )\n\n const selectedLanguages = useMemo(() => {\n if (params?.langs === '$none') {\n return []\n }\n\n if (params?.langs === '$all') {\n return selectableLanguages.map((lang) => lang.id)\n }\n\n return params?.langs?.split(LANG_ID_SEPARATOR) || selectableLanguages.map((lang) => lang.id)\n }, [params, selectableLanguages])\n\n const selectAll = useCallback(() => {\n setParams({...params, langs: '$all'})\n }, [params, setParams])\n\n const selectNone = useCallback(() => {\n setParams({...params, langs: '$none'})\n }, [params, setParams])\n\n const toggleLanguage = useCallback(\n (languageId: string) => {\n let lang = selectedLanguages\n\n if (lang.includes(languageId)) {\n lang = lang.filter((l) => l !== languageId)\n } else {\n lang = [...lang, languageId]\n }\n\n if (lang.length === 0) {\n setParams({...params, langs: '$none'}) // none\n return\n }\n\n if (lang.length === selectableLanguages.length) {\n setParams({...params, langs: '$all'})\n return\n }\n\n setParams({...params, langs: lang.join(LANG_ID_SEPARATOR)})\n },\n [params, selectableLanguages, selectedLanguages, setParams]\n )\n\n const visibleLanguages = useMemo(\n () => [...(defaultLanguages ?? []), ...selectedLanguages],\n [defaultLanguages, selectedLanguages]\n )\n\n return {\n visibleLanguages,\n allSelected: selectedLanguages.length === selectableLanguages.length,\n selectAll,\n selectNone,\n toggleLanguage,\n }\n}\n","import type {SchemaType} from 'sanity'\nimport {FilterFieldFunction, LanguageFilterConfig, LanguageFilterSchema} from './types'\n\nexport const defaultFilterField: FilterFieldFunction = (\n enclosingType,\n field,\n selectedLanguageIds\n) => !enclosingType.name.startsWith('locale') || selectedLanguageIds.includes(field.name)\n\nexport function isLanguageFilterEnabled(\n schemaType: SchemaType | undefined,\n options: LanguageFilterConfig\n): boolean {\n const schemaFilter =\n isDocument(schemaType) && (schemaType as LanguageFilterSchema)?.options?.languageFilter\n const defaultEnabled = !options.documentTypes\n\n return !!(\n (defaultEnabled && schemaFilter !== false) ||\n (!defaultEnabled && schemaFilter) ||\n (schemaType && options.documentTypes?.includes(schemaType.name))\n )\n}\n\nfunction isDocument(schemaType?: SchemaType) {\n return schemaType?.jsonType === 'object' && getRootType(schemaType).name === 'document'\n}\n\nfunction getRootType(schema: SchemaType): SchemaType {\n if (schema.type) {\n return getRootType(schema.type)\n }\n return schema\n}\n","import {TranslateIcon} from '@sanity/icons'\nimport {Box, Button, Card, Checkbox, Flex, Popover, Stack, Text, useClickOutside} from '@sanity/ui'\nimport React, {FormEvent, useCallback, useState} from 'react'\nimport {usePaneLanguages} from './usePaneLanguages'\nimport {LanguageFilterConfig} from './types'\n\nexport interface LanguageFilterMenuButtonProps {\n options: LanguageFilterConfig\n}\n\nexport function LanguageFilterMenuButton(props: LanguageFilterMenuButtonProps) {\n const {options} = props\n const defaultLanguages = options.supportedLanguages.filter((l) =>\n options.defaultLanguages?.includes(l.id)\n )\n const languageOptions = options.supportedLanguages.filter(\n (l) => !options.defaultLanguages?.includes(l.id)\n )\n const [open, setOpen] = useState(false)\n const {visibleLanguages, allSelected, selectAll, selectNone, toggleLanguage} = usePaneLanguages({\n options,\n })\n const [button, setButton] = useState<HTMLElement | null>(null)\n const [popover, setPopover] = useState<HTMLElement | null>(null)\n\n const handleToggleAll = useCallback(\n (event: FormEvent<HTMLInputElement>) => {\n const checked = event.currentTarget.checked\n\n if (checked) {\n selectAll()\n } else {\n selectNone()\n }\n },\n [selectAll, selectNone]\n )\n\n const handleClick = useCallback(() => setOpen((o) => !o), [])\n\n const handleClickOutside = useCallback(() => setOpen(false), [])\n\n useClickOutside(handleClickOutside, [button, popover])\n\n const content = (\n <Box overflow=\"auto\" padding={1}>\n {defaultLanguages.length > 0 && (\n <Card radius={2} tone=\"primary\">\n <Stack padding={2} space={3}>\n <Text size={1} weight=\"semibold\">\n Default language{defaultLanguages.length > 1 && <>s</>}\n </Text>\n\n {defaultLanguages.map((l) => (\n <Text key={l.id}>{l.title}</Text>\n ))}\n </Stack>\n </Card>\n )}\n\n <Stack marginTop={3} padding={2} space={2}>\n <Box paddingBottom={1}>\n <Text size={1} weight=\"semibold\">\n Show translations\n </Text>\n </Box>\n\n <Card as=\"label\">\n <Flex align=\"center\" gap={2}>\n <Checkbox checked={allSelected} name=\"_allSelected\" onChange={handleToggleAll} />\n <Box flex={1}>\n <Text muted={!allSelected} weight=\"semibold\">\n All translations\n </Text>\n </Box>\n </Flex>\n </Card>\n\n {languageOptions.map((lang) => (\n <LanguageFilterOption\n id={lang.id}\n key={lang.id}\n onToggle={toggleLanguage}\n selected={visibleLanguages.includes(lang.id)}\n title={lang.title}\n />\n ))}\n </Stack>\n </Box>\n )\n\n return (\n <Popover constrainSize content={content} open={open} portal ref={setPopover}>\n <Button\n icon={TranslateIcon}\n text={`Filter languages (${visibleLanguages.length}/${options.supportedLanguages.length})`}\n mode=\"bleed\"\n onClick={handleClick}\n ref={setButton}\n selected={open}\n />\n </Popover>\n )\n}\n\nfunction LanguageFilterOption(props: {\n id: string\n onToggle: (id: string) => void\n selected: boolean\n title: string\n}) {\n const {id, onToggle, selected, title} = props\n\n const handleChange = useCallback(() => {\n onToggle(id)\n }, [id, onToggle])\n\n return (\n <Card as=\"label\">\n <Flex align=\"center\" gap={2}>\n <Checkbox checked={selected} name={`language-${id}`} onChange={handleChange} />\n <Box flex={1}>\n <Text muted={!selected}>{title}</Text>\n </Box>\n </Flex>\n </Card>\n )\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../"}
@@ -0,0 +1,73 @@
1
+ import { FieldMember, FieldsetState, ObjectSchemaType, SchemaType, ObjectInputProps } from "sanity";
2
+ export interface LanguageFilterOptions {
3
+ languageFilter?: boolean;
4
+ }
5
+ export interface LanguageFilterSchema extends ObjectSchemaType {
6
+ options?: LanguageFilterOptions;
7
+ }
8
+ export interface Language {
9
+ id: string;
10
+ title: string;
11
+ }
12
+ export type FilterFieldFunction = (enclosingType: ObjectSchemaType, field: FieldMember | FieldsetState, selectedLanguageIds: string[]) => boolean;
13
+ export interface LanguageFilterConfig {
14
+ supportedLanguages: Language[];
15
+ defaultLanguages?: string[];
16
+ documentTypes?: string[];
17
+ filterField?: FilterFieldFunction;
18
+ }
19
+ export function usePaneLanguages(props: {
20
+ options: LanguageFilterConfig;
21
+ }): {
22
+ visibleLanguages: string[];
23
+ allSelected: boolean;
24
+ selectAll: () => void;
25
+ selectNone: () => void;
26
+ toggleLanguage: (languageId: string) => void;
27
+ };
28
+ export const defaultFilterField: FilterFieldFunction;
29
+ export function isLanguageFilterEnabled(schemaType: SchemaType | undefined, options: LanguageFilterConfig): boolean;
30
+ export type LanguageFilterObjectInputProps = {
31
+ options: LanguageFilterConfig;
32
+ } & ObjectInputProps;
33
+ export function LanguageFilterObjectInput(props: LanguageFilterObjectInputProps): JSX.Element;
34
+ export interface LanguageFilterMenuButtonProps {
35
+ options: LanguageFilterConfig;
36
+ }
37
+ export function LanguageFilterMenuButton(props: LanguageFilterMenuButtonProps): JSX.Element;
38
+ /**
39
+ * ## Usage in sanity.config.ts (or .js)
40
+ *
41
+ * ```
42
+ * import {createConfig} from 'sanity'
43
+ * import {languageFilter} from '@sanity/language-filter'
44
+ *
45
+ * export const createConfig({
46
+ * /...
47
+ * plugins: [
48
+ * languageFilter({
49
+ * supportedLanguages: [
50
+ * {id: 'nb', title: 'Norwegian (Bokmål)'},
51
+ * {id: 'nn', title: 'Norwegian (Nynorsk)'},
52
+ * {id: 'en', title: 'English'},
53
+ * {id: 'es', title: 'Spanish'},
54
+ * {id: 'arb', title: 'Arabic'},
55
+ * {id: 'pt', title: 'Portuguese'},
56
+ * //...
57
+ * ],
58
+ * // Select Norwegian (Bokmål) by default
59
+ * defaultLanguages: ['nb'],
60
+ * // Only show language filter for document type `page` (schemaType.name)
61
+ * // Can also enable via document-options: options.languageFilter: true
62
+ * documentTypes: ['page'],
63
+ * // default filter function shown
64
+ * filterField: (enclosingType, field, selectedLanguageIds) =>
65
+ * !enclosingType.name.startsWith('locale') || selectedLanguageIds.includes(field.name),
66
+ * })
67
+ * ]
68
+ * })
69
+ * ```
70
+ */
71
+ export const languageFilter: import("sanity").Plugin<LanguageFilterConfig>;
72
+
73
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"mappings":";AAEA;IACE,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,qCAAsC,SAAQ,gBAAgB;IAC5D,OAAO,CAAC,EAAE,qBAAqB,CAAA;CAChC;AAED;IACE,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACd;AAED,kCAAkC,CAChC,aAAa,EAAE,gBAAgB,EAC/B,KAAK,EAAE,WAAW,GAAG,aAAa,EAClC,mBAAmB,EAAE,MAAM,EAAE,KAC1B,OAAO,CAAA;AAEZ;IACE,kBAAkB,EAAE,QAAQ,EAAE,CAAA;IAC9B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,WAAW,CAAC,EAAE,mBAAmB,CAAA;CAClC;ACnBD,iCAAiC,KAAK,EAAE;IAAC,OAAO,EAAE,oBAAoB,CAAA;CAAC,GAAG;IACxE,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,WAAW,EAAE,OAAO,CAAA;IACpB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;CAC7C,CAmEA;AC7ED,OAAO,MAAM,oBAAoB,mBAIwD,CAAA;AAEzF,wCACE,UAAU,EAAE,UAAU,GAAG,SAAS,EAClC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAUT;ACfD,6CAA6C;IAAC,OAAO,EAAE,oBAAoB,CAAA;CAAC,GAAG,gBAAgB,CAAA;AAE/F,0CAA0C,KAAK,EAAE,8BAA8B,eAuB9E;AC1BD;IACE,OAAO,EAAE,oBAAoB,CAAA;CAC9B;AAED,yCAAyC,KAAK,EAAE,6BAA6B,eA6F5E;AChGD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,MAAM,6DA0BX,CAAA","sources":["src/src/types.ts","src/src/usePaneLanguages.ts","src/src/filterField.ts","src/src/LanguageFilterObjectInput.tsx","src/src/LanguageFilterMenuButton.tsx","src/src/plugin.tsx","src/src/index.ts","src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,"/**\n * Plugin function\n */\nexport {languageFilter} from './plugin'\n\nexport {defaultFilterField, isLanguageFilterEnabled} from './filterField'\n\nexport type {\n LanguageFilterConfig,\n LanguageFilterSchema,\n LanguageFilterOptions,\n FilterFieldFunction,\n Language,\n} from './types'\n\nexport {\n LanguageFilterObjectInput,\n type LanguageFilterObjectInputProps,\n} from './LanguageFilterObjectInput'\n\nexport {\n LanguageFilterMenuButton,\n type LanguageFilterMenuButtonProps,\n} from './LanguageFilterMenuButton'\n\nexport {usePaneLanguages} from './usePaneLanguages'\n"],"names":[],"version":3,"file":"index.d.ts.map","sourceRoot":"../../"}
package/package.json CHANGED
@@ -1,38 +1,88 @@
1
1
  {
2
2
  "name": "@sanity/language-filter",
3
- "version": "0.147.10-ts-client.1+5473a24ff",
3
+ "version": "1.0.0-firstpass-v3-impl.1",
4
4
  "description": "A Sanity plugin that supports filtering localized fields by language",
5
- "main": "index.js",
6
- "scripts": {
7
- "clean": "rimraf lib"
8
- },
9
- "keywords": [
10
- "sanity",
11
- "cms",
12
- "headless",
13
- "realtime",
14
- "content",
15
- "language-filter"
16
- ],
17
- "dependencies": {
18
- "rxjs": "^6.5.3"
19
- },
20
- "peerDependencies": {
21
- "prop-types": "^15.3",
22
- "react": "^16.9"
23
- },
24
5
  "author": "Sanity.io <hello@sanity.io>",
25
6
  "license": "MIT",
26
- "bugs": {
27
- "url": "https://github.com/sanity-io/sanity/issues"
7
+ "source": "./src/index.ts",
8
+ "main": "./lib/cjs/index.js",
9
+ "module": "./lib/esm/index.js",
10
+ "types": "./lib/types/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "require": "./lib/cjs/index.js",
14
+ "default": "./lib/esm/index.js"
15
+ }
16
+ },
17
+ "files": [
18
+ "src",
19
+ "lib",
20
+ "v2-incompatible.js",
21
+ "sanity.json"
22
+ ],
23
+ "scripts": {
24
+ "clean": "rimraf lib",
25
+ "lint": "eslint .",
26
+ "prebuild": "npm run clean && plugin-kit verify-package --silent",
27
+ "build": "parcel build --no-cache",
28
+ "watch": "parcel watch",
29
+ "test": "jest",
30
+ "link-watch": "plugin-kit link-watch",
31
+ "prepublishOnly": "npm run build"
28
32
  },
29
- "homepage": "https://www.sanity.io/",
30
33
  "repository": {
31
34
  "type": "git",
32
- "url": "git+https://github.com/sanity-io/sanity.git"
35
+ "url": "git+ssh://git@github.com/sanity-io/language-filter.git"
36
+ },
37
+ "engines": {
38
+ "node": ">=14.0.0"
39
+ },
40
+ "dependencies": {
41
+ "@sanity/icons": "^1.3.4",
42
+ "@sanity/incompatible-plugin": "^1.0.0",
43
+ "@sanity/ui": "^0.37.20",
44
+ "@sanity/util": "3.0.0-dev-preview.15"
33
45
  },
34
- "publishConfig": {
35
- "access": "public"
46
+ "devDependencies": {
47
+ "@babel/preset-env": "^7.18.10",
48
+ "@babel/preset-react": "^7.18.6",
49
+ "@commitlint/cli": "^17.0.3",
50
+ "@commitlint/config-conventional": "^17.0.3",
51
+ "@parcel/packager-ts": "^2.7.0",
52
+ "@parcel/transformer-typescript-types": "^2.7.0",
53
+ "@sanity/plugin-kit": "^1.0.1",
54
+ "@sanity/semantic-release-preset": "^2.0.1",
55
+ "@types/jest": "^28.1.8",
56
+ "@typescript-eslint/eslint-plugin": "^5.35.1",
57
+ "@typescript-eslint/parser": "^5.35.1",
58
+ "eslint": "^8.22.0",
59
+ "eslint-config-prettier": "^8.5.0",
60
+ "eslint-config-sanity": "^6.0.0",
61
+ "eslint-plugin-prettier": "^4.2.1",
62
+ "eslint-plugin-react": "^7.31.0",
63
+ "eslint-plugin-react-hooks": "^4.6.0",
64
+ "husky": "^8.0.1",
65
+ "jest": "^28.1.3",
66
+ "lint-staged": "^13.0.3",
67
+ "parcel": "^2.7.0",
68
+ "prettier": "^2.7.1",
69
+ "react": "^17.0.0 || ^18.0.0",
70
+ "rimraf": "^3.0.2",
71
+ "sanity": "3.0.0-dev-preview.15",
72
+ "ts-jest": "^28.0.8",
73
+ "typescript": "^4.7.4"
74
+ },
75
+ "peerDependencies": {
76
+ "react": "^17.0.0 || ^18.0.0",
77
+ "sanity": "dev-preview"
78
+ },
79
+ "bugs": {
80
+ "url": "https://github.com/sanity-io/language-filter/issues"
36
81
  },
37
- "gitHead": "5473a24ff3431de02eed65e8b70e3487fb03e2da"
82
+ "homepage": "https://github.com/sanity-io/language-filter#readme",
83
+ "sanityPlugin": {
84
+ "verifyPackage": {
85
+ "babelConfig": false
86
+ }
87
+ }
38
88
  }
package/sanity.json CHANGED
@@ -1,16 +1,8 @@
1
1
  {
2
- "paths": {
3
- "source": "./src",
4
- "compiled": "./lib"
5
- },
6
2
  "parts": [
7
3
  {
8
- "implements": "part:@sanity/desk-tool/filter-fields-fn",
9
- "path": "filter-fields.js"
10
- },
11
- {
12
- "implements": "part:@sanity/desk-tool/language-select-component",
13
- "path": "SelectLanguageProvider.js"
4
+ "implements": "part:@sanity/base/sanity-root",
5
+ "path": "./v2-incompatible.js"
14
6
  }
15
7
  ]
16
8
  }