@ruya.sa/plugin-import-export 3.71.3

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.
Files changed (410) hide show
  1. package/README.md +7 -0
  2. package/dist/components/CollectionField/index.d.ts +3 -0
  3. package/dist/components/CollectionField/index.d.ts.map +1 -0
  4. package/dist/components/CollectionField/index.js +29 -0
  5. package/dist/components/CollectionField/index.js.map +1 -0
  6. package/dist/components/ExportListMenuItem/index.d.ts +6 -0
  7. package/dist/components/ExportListMenuItem/index.d.ts.map +1 -0
  8. package/dist/components/ExportListMenuItem/index.js +44 -0
  9. package/dist/components/ExportListMenuItem/index.js.map +1 -0
  10. package/dist/components/ExportPreview/index.d.ts +4 -0
  11. package/dist/components/ExportPreview/index.d.ts.map +1 -0
  12. package/dist/components/ExportPreview/index.js +252 -0
  13. package/dist/components/ExportPreview/index.js.map +1 -0
  14. package/dist/components/ExportPreview/index.scss +36 -0
  15. package/dist/components/ExportSaveButton/index.d.ts +3 -0
  16. package/dist/components/ExportSaveButton/index.d.ts.map +1 -0
  17. package/dist/components/ExportSaveButton/index.js +110 -0
  18. package/dist/components/ExportSaveButton/index.js.map +1 -0
  19. package/dist/components/FieldsToExport/index.d.ts +3 -0
  20. package/dist/components/FieldsToExport/index.d.ts.map +1 -0
  21. package/dist/components/FieldsToExport/index.js +87 -0
  22. package/dist/components/FieldsToExport/index.js.map +1 -0
  23. package/dist/components/FieldsToExport/index.scss +0 -0
  24. package/dist/components/FieldsToExport/reduceFields.d.ts +13 -0
  25. package/dist/components/FieldsToExport/reduceFields.d.ts.map +1 -0
  26. package/dist/components/FieldsToExport/reduceFields.js +109 -0
  27. package/dist/components/FieldsToExport/reduceFields.js.map +1 -0
  28. package/dist/components/ImportCollectionField/index.d.ts +3 -0
  29. package/dist/components/ImportCollectionField/index.d.ts.map +1 -0
  30. package/dist/components/ImportCollectionField/index.js +17 -0
  31. package/dist/components/ImportCollectionField/index.js.map +1 -0
  32. package/dist/components/ImportExportProvider/index.d.ts +12 -0
  33. package/dist/components/ImportExportProvider/index.d.ts.map +1 -0
  34. package/dist/components/ImportExportProvider/index.js +20 -0
  35. package/dist/components/ImportExportProvider/index.js.map +1 -0
  36. package/dist/components/ImportListMenuItem/index.d.ts +6 -0
  37. package/dist/components/ImportListMenuItem/index.d.ts.map +1 -0
  38. package/dist/components/ImportListMenuItem/index.js +48 -0
  39. package/dist/components/ImportListMenuItem/index.js.map +1 -0
  40. package/dist/components/ImportPreview/index.d.ts +4 -0
  41. package/dist/components/ImportPreview/index.d.ts.map +1 -0
  42. package/dist/components/ImportPreview/index.js +624 -0
  43. package/dist/components/ImportPreview/index.js.map +1 -0
  44. package/dist/components/ImportPreview/index.scss +41 -0
  45. package/dist/components/ImportSaveButton/index.d.ts +2 -0
  46. package/dist/components/ImportSaveButton/index.d.ts.map +1 -0
  47. package/dist/components/ImportSaveButton/index.js +18 -0
  48. package/dist/components/ImportSaveButton/index.js.map +1 -0
  49. package/dist/components/Page/index.d.ts +4 -0
  50. package/dist/components/Page/index.d.ts.map +1 -0
  51. package/dist/components/Page/index.js +40 -0
  52. package/dist/components/Page/index.js.map +1 -0
  53. package/dist/components/Page/index.scss +5 -0
  54. package/dist/components/SelectionToUseField/index.d.ts +3 -0
  55. package/dist/components/SelectionToUseField/index.d.ts.map +1 -0
  56. package/dist/components/SelectionToUseField/index.js +128 -0
  57. package/dist/components/SelectionToUseField/index.js.map +1 -0
  58. package/dist/components/SortBy/index.d.ts +4 -0
  59. package/dist/components/SortBy/index.d.ts.map +1 -0
  60. package/dist/components/SortBy/index.js +133 -0
  61. package/dist/components/SortBy/index.js.map +1 -0
  62. package/dist/components/SortBy/index.scss +3 -0
  63. package/dist/components/SortOrder/index.d.ts +4 -0
  64. package/dist/components/SortOrder/index.d.ts.map +1 -0
  65. package/dist/components/SortOrder/index.js +121 -0
  66. package/dist/components/SortOrder/index.js.map +1 -0
  67. package/dist/components/SortOrder/index.scss +3 -0
  68. package/dist/constants.d.ts +21 -0
  69. package/dist/constants.d.ts.map +1 -0
  70. package/dist/constants.js +21 -0
  71. package/dist/constants.js.map +1 -0
  72. package/dist/export/batchProcessor.d.ts +107 -0
  73. package/dist/export/batchProcessor.d.ts.map +1 -0
  74. package/dist/export/batchProcessor.js +187 -0
  75. package/dist/export/batchProcessor.js.map +1 -0
  76. package/dist/export/createExport.d.ts +37 -0
  77. package/dist/export/createExport.d.ts.map +1 -0
  78. package/dist/export/createExport.js +385 -0
  79. package/dist/export/createExport.js.map +1 -0
  80. package/dist/export/getCreateExportCollectionTask.d.ts +16 -0
  81. package/dist/export/getCreateExportCollectionTask.d.ts.map +1 -0
  82. package/dist/export/getCreateExportCollectionTask.js +35 -0
  83. package/dist/export/getCreateExportCollectionTask.js.map +1 -0
  84. package/dist/export/getExportCollection.d.ts +8 -0
  85. package/dist/export/getExportCollection.d.ts.map +1 -0
  86. package/dist/export/getExportCollection.js +100 -0
  87. package/dist/export/getExportCollection.js.map +1 -0
  88. package/dist/export/getFields.d.ts +10 -0
  89. package/dist/export/getFields.d.ts.map +1 -0
  90. package/dist/export/getFields.js +244 -0
  91. package/dist/export/getFields.js.map +1 -0
  92. package/dist/export/handleDownload.d.ts +3 -0
  93. package/dist/export/handleDownload.d.ts.map +1 -0
  94. package/dist/export/handleDownload.js +42 -0
  95. package/dist/export/handleDownload.js.map +1 -0
  96. package/dist/export/handlePreview.d.ts +3 -0
  97. package/dist/export/handlePreview.d.ts.map +1 -0
  98. package/dist/export/handlePreview.js +163 -0
  99. package/dist/export/handlePreview.js.map +1 -0
  100. package/dist/exports/rsc.d.ts +15 -0
  101. package/dist/exports/rsc.d.ts.map +1 -0
  102. package/dist/exports/rsc.js +16 -0
  103. package/dist/exports/rsc.js.map +1 -0
  104. package/dist/exports/types.d.ts +2 -0
  105. package/dist/exports/types.d.ts.map +1 -0
  106. package/dist/exports/types.js +3 -0
  107. package/dist/exports/types.js.map +1 -0
  108. package/dist/import/batchProcessor.d.ts +46 -0
  109. package/dist/import/batchProcessor.d.ts.map +1 -0
  110. package/dist/import/batchProcessor.js +529 -0
  111. package/dist/import/batchProcessor.js.map +1 -0
  112. package/dist/import/createImport.d.ts +45 -0
  113. package/dist/import/createImport.d.ts.map +1 -0
  114. package/dist/import/createImport.js +175 -0
  115. package/dist/import/createImport.js.map +1 -0
  116. package/dist/import/getCreateImportCollectionTask.d.ts +13 -0
  117. package/dist/import/getCreateImportCollectionTask.d.ts.map +1 -0
  118. package/dist/import/getCreateImportCollectionTask.js +81 -0
  119. package/dist/import/getCreateImportCollectionTask.js.map +1 -0
  120. package/dist/import/getFields.d.ts +7 -0
  121. package/dist/import/getFields.d.ts.map +1 -0
  122. package/dist/import/getFields.js +150 -0
  123. package/dist/import/getFields.js.map +1 -0
  124. package/dist/import/getImportCollection.d.ts +8 -0
  125. package/dist/import/getImportCollection.d.ts.map +1 -0
  126. package/dist/import/getImportCollection.js +258 -0
  127. package/dist/import/getImportCollection.js.map +1 -0
  128. package/dist/import/handlePreview.d.ts +3 -0
  129. package/dist/import/handlePreview.d.ts.map +1 -0
  130. package/dist/import/handlePreview.js +94 -0
  131. package/dist/import/handlePreview.js.map +1 -0
  132. package/dist/index.d.ts +32 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +120 -0
  135. package/dist/index.js.map +1 -0
  136. package/dist/translations/index.d.ts +6 -0
  137. package/dist/translations/index.d.ts.map +1 -0
  138. package/dist/translations/index.js +84 -0
  139. package/dist/translations/index.js.map +1 -0
  140. package/dist/translations/languages/ar.d.ts +4 -0
  141. package/dist/translations/languages/ar.d.ts.map +1 -0
  142. package/dist/translations/languages/ar.js +48 -0
  143. package/dist/translations/languages/ar.js.map +1 -0
  144. package/dist/translations/languages/az.d.ts +4 -0
  145. package/dist/translations/languages/az.d.ts.map +1 -0
  146. package/dist/translations/languages/az.js +48 -0
  147. package/dist/translations/languages/az.js.map +1 -0
  148. package/dist/translations/languages/bg.d.ts +4 -0
  149. package/dist/translations/languages/bg.d.ts.map +1 -0
  150. package/dist/translations/languages/bg.js +48 -0
  151. package/dist/translations/languages/bg.js.map +1 -0
  152. package/dist/translations/languages/bnBd.d.ts +4 -0
  153. package/dist/translations/languages/bnBd.d.ts.map +1 -0
  154. package/dist/translations/languages/bnBd.js +48 -0
  155. package/dist/translations/languages/bnBd.js.map +1 -0
  156. package/dist/translations/languages/bnIn.d.ts +4 -0
  157. package/dist/translations/languages/bnIn.d.ts.map +1 -0
  158. package/dist/translations/languages/bnIn.js +48 -0
  159. package/dist/translations/languages/bnIn.js.map +1 -0
  160. package/dist/translations/languages/ca.d.ts +4 -0
  161. package/dist/translations/languages/ca.d.ts.map +1 -0
  162. package/dist/translations/languages/ca.js +48 -0
  163. package/dist/translations/languages/ca.js.map +1 -0
  164. package/dist/translations/languages/cs.d.ts +4 -0
  165. package/dist/translations/languages/cs.d.ts.map +1 -0
  166. package/dist/translations/languages/cs.js +48 -0
  167. package/dist/translations/languages/cs.js.map +1 -0
  168. package/dist/translations/languages/da.d.ts +4 -0
  169. package/dist/translations/languages/da.d.ts.map +1 -0
  170. package/dist/translations/languages/da.js +48 -0
  171. package/dist/translations/languages/da.js.map +1 -0
  172. package/dist/translations/languages/de.d.ts +4 -0
  173. package/dist/translations/languages/de.d.ts.map +1 -0
  174. package/dist/translations/languages/de.js +48 -0
  175. package/dist/translations/languages/de.js.map +1 -0
  176. package/dist/translations/languages/en.d.ts +45 -0
  177. package/dist/translations/languages/en.d.ts.map +1 -0
  178. package/dist/translations/languages/en.js +48 -0
  179. package/dist/translations/languages/en.js.map +1 -0
  180. package/dist/translations/languages/es.d.ts +4 -0
  181. package/dist/translations/languages/es.d.ts.map +1 -0
  182. package/dist/translations/languages/es.js +48 -0
  183. package/dist/translations/languages/es.js.map +1 -0
  184. package/dist/translations/languages/et.d.ts +4 -0
  185. package/dist/translations/languages/et.d.ts.map +1 -0
  186. package/dist/translations/languages/et.js +48 -0
  187. package/dist/translations/languages/et.js.map +1 -0
  188. package/dist/translations/languages/fa.d.ts +4 -0
  189. package/dist/translations/languages/fa.d.ts.map +1 -0
  190. package/dist/translations/languages/fa.js +48 -0
  191. package/dist/translations/languages/fa.js.map +1 -0
  192. package/dist/translations/languages/fr.d.ts +4 -0
  193. package/dist/translations/languages/fr.d.ts.map +1 -0
  194. package/dist/translations/languages/fr.js +48 -0
  195. package/dist/translations/languages/fr.js.map +1 -0
  196. package/dist/translations/languages/he.d.ts +4 -0
  197. package/dist/translations/languages/he.d.ts.map +1 -0
  198. package/dist/translations/languages/he.js +48 -0
  199. package/dist/translations/languages/he.js.map +1 -0
  200. package/dist/translations/languages/hr.d.ts +4 -0
  201. package/dist/translations/languages/hr.d.ts.map +1 -0
  202. package/dist/translations/languages/hr.js +48 -0
  203. package/dist/translations/languages/hr.js.map +1 -0
  204. package/dist/translations/languages/hu.d.ts +4 -0
  205. package/dist/translations/languages/hu.d.ts.map +1 -0
  206. package/dist/translations/languages/hu.js +48 -0
  207. package/dist/translations/languages/hu.js.map +1 -0
  208. package/dist/translations/languages/hy.d.ts +4 -0
  209. package/dist/translations/languages/hy.d.ts.map +1 -0
  210. package/dist/translations/languages/hy.js +48 -0
  211. package/dist/translations/languages/hy.js.map +1 -0
  212. package/dist/translations/languages/id.d.ts +4 -0
  213. package/dist/translations/languages/id.d.ts.map +1 -0
  214. package/dist/translations/languages/id.js +48 -0
  215. package/dist/translations/languages/id.js.map +1 -0
  216. package/dist/translations/languages/is.d.ts +4 -0
  217. package/dist/translations/languages/is.d.ts.map +1 -0
  218. package/dist/translations/languages/is.js +48 -0
  219. package/dist/translations/languages/is.js.map +1 -0
  220. package/dist/translations/languages/it.d.ts +4 -0
  221. package/dist/translations/languages/it.d.ts.map +1 -0
  222. package/dist/translations/languages/it.js +48 -0
  223. package/dist/translations/languages/it.js.map +1 -0
  224. package/dist/translations/languages/ja.d.ts +4 -0
  225. package/dist/translations/languages/ja.d.ts.map +1 -0
  226. package/dist/translations/languages/ja.js +48 -0
  227. package/dist/translations/languages/ja.js.map +1 -0
  228. package/dist/translations/languages/ko.d.ts +4 -0
  229. package/dist/translations/languages/ko.d.ts.map +1 -0
  230. package/dist/translations/languages/ko.js +48 -0
  231. package/dist/translations/languages/ko.js.map +1 -0
  232. package/dist/translations/languages/lt.d.ts +4 -0
  233. package/dist/translations/languages/lt.d.ts.map +1 -0
  234. package/dist/translations/languages/lt.js +48 -0
  235. package/dist/translations/languages/lt.js.map +1 -0
  236. package/dist/translations/languages/lv.d.ts +4 -0
  237. package/dist/translations/languages/lv.d.ts.map +1 -0
  238. package/dist/translations/languages/lv.js +48 -0
  239. package/dist/translations/languages/lv.js.map +1 -0
  240. package/dist/translations/languages/my.d.ts +4 -0
  241. package/dist/translations/languages/my.d.ts.map +1 -0
  242. package/dist/translations/languages/my.js +48 -0
  243. package/dist/translations/languages/my.js.map +1 -0
  244. package/dist/translations/languages/nb.d.ts +4 -0
  245. package/dist/translations/languages/nb.d.ts.map +1 -0
  246. package/dist/translations/languages/nb.js +48 -0
  247. package/dist/translations/languages/nb.js.map +1 -0
  248. package/dist/translations/languages/nl.d.ts +4 -0
  249. package/dist/translations/languages/nl.d.ts.map +1 -0
  250. package/dist/translations/languages/nl.js +48 -0
  251. package/dist/translations/languages/nl.js.map +1 -0
  252. package/dist/translations/languages/pl.d.ts +4 -0
  253. package/dist/translations/languages/pl.d.ts.map +1 -0
  254. package/dist/translations/languages/pl.js +48 -0
  255. package/dist/translations/languages/pl.js.map +1 -0
  256. package/dist/translations/languages/pt.d.ts +4 -0
  257. package/dist/translations/languages/pt.d.ts.map +1 -0
  258. package/dist/translations/languages/pt.js +48 -0
  259. package/dist/translations/languages/pt.js.map +1 -0
  260. package/dist/translations/languages/ro.d.ts +4 -0
  261. package/dist/translations/languages/ro.d.ts.map +1 -0
  262. package/dist/translations/languages/ro.js +48 -0
  263. package/dist/translations/languages/ro.js.map +1 -0
  264. package/dist/translations/languages/rs.d.ts +4 -0
  265. package/dist/translations/languages/rs.d.ts.map +1 -0
  266. package/dist/translations/languages/rs.js +48 -0
  267. package/dist/translations/languages/rs.js.map +1 -0
  268. package/dist/translations/languages/rsLatin.d.ts +4 -0
  269. package/dist/translations/languages/rsLatin.d.ts.map +1 -0
  270. package/dist/translations/languages/rsLatin.js +48 -0
  271. package/dist/translations/languages/rsLatin.js.map +1 -0
  272. package/dist/translations/languages/ru.d.ts +4 -0
  273. package/dist/translations/languages/ru.d.ts.map +1 -0
  274. package/dist/translations/languages/ru.js +48 -0
  275. package/dist/translations/languages/ru.js.map +1 -0
  276. package/dist/translations/languages/sk.d.ts +4 -0
  277. package/dist/translations/languages/sk.d.ts.map +1 -0
  278. package/dist/translations/languages/sk.js +48 -0
  279. package/dist/translations/languages/sk.js.map +1 -0
  280. package/dist/translations/languages/sl.d.ts +4 -0
  281. package/dist/translations/languages/sl.d.ts.map +1 -0
  282. package/dist/translations/languages/sl.js +48 -0
  283. package/dist/translations/languages/sl.js.map +1 -0
  284. package/dist/translations/languages/sv.d.ts +4 -0
  285. package/dist/translations/languages/sv.d.ts.map +1 -0
  286. package/dist/translations/languages/sv.js +48 -0
  287. package/dist/translations/languages/sv.js.map +1 -0
  288. package/dist/translations/languages/ta.d.ts +4 -0
  289. package/dist/translations/languages/ta.d.ts.map +1 -0
  290. package/dist/translations/languages/ta.js +48 -0
  291. package/dist/translations/languages/ta.js.map +1 -0
  292. package/dist/translations/languages/th.d.ts +4 -0
  293. package/dist/translations/languages/th.d.ts.map +1 -0
  294. package/dist/translations/languages/th.js +48 -0
  295. package/dist/translations/languages/th.js.map +1 -0
  296. package/dist/translations/languages/tr.d.ts +4 -0
  297. package/dist/translations/languages/tr.d.ts.map +1 -0
  298. package/dist/translations/languages/tr.js +48 -0
  299. package/dist/translations/languages/tr.js.map +1 -0
  300. package/dist/translations/languages/translation-schema.json +114 -0
  301. package/dist/translations/languages/uk.d.ts +4 -0
  302. package/dist/translations/languages/uk.d.ts.map +1 -0
  303. package/dist/translations/languages/uk.js +48 -0
  304. package/dist/translations/languages/uk.js.map +1 -0
  305. package/dist/translations/languages/vi.d.ts +4 -0
  306. package/dist/translations/languages/vi.d.ts.map +1 -0
  307. package/dist/translations/languages/vi.js +48 -0
  308. package/dist/translations/languages/vi.js.map +1 -0
  309. package/dist/translations/languages/zh.d.ts +4 -0
  310. package/dist/translations/languages/zh.d.ts.map +1 -0
  311. package/dist/translations/languages/zh.js +48 -0
  312. package/dist/translations/languages/zh.js.map +1 -0
  313. package/dist/translations/languages/zhTw.d.ts +4 -0
  314. package/dist/translations/languages/zhTw.d.ts.map +1 -0
  315. package/dist/translations/languages/zhTw.js +48 -0
  316. package/dist/translations/languages/zhTw.js.map +1 -0
  317. package/dist/translations/types.d.ts +38 -0
  318. package/dist/translations/types.d.ts.map +1 -0
  319. package/dist/translations/types.js +3 -0
  320. package/dist/translations/types.js.map +1 -0
  321. package/dist/types.d.ts +221 -0
  322. package/dist/types.d.ts.map +1 -0
  323. package/dist/types.js +5 -0
  324. package/dist/types.js.map +1 -0
  325. package/dist/utilities/buildDisabledFieldRegex.d.ts +5 -0
  326. package/dist/utilities/buildDisabledFieldRegex.d.ts.map +1 -0
  327. package/dist/utilities/buildDisabledFieldRegex.js +12 -0
  328. package/dist/utilities/buildDisabledFieldRegex.js.map +1 -0
  329. package/dist/utilities/collectDisabledFieldPaths.d.ts +15 -0
  330. package/dist/utilities/collectDisabledFieldPaths.d.ts.map +1 -0
  331. package/dist/utilities/collectDisabledFieldPaths.js +61 -0
  332. package/dist/utilities/collectDisabledFieldPaths.js.map +1 -0
  333. package/dist/utilities/flattenObject.d.ts +11 -0
  334. package/dist/utilities/flattenObject.d.ts.map +1 -0
  335. package/dist/utilities/flattenObject.js +129 -0
  336. package/dist/utilities/flattenObject.js.map +1 -0
  337. package/dist/utilities/getExportFieldFunctions.d.ts +12 -0
  338. package/dist/utilities/getExportFieldFunctions.d.ts.map +1 -0
  339. package/dist/utilities/getExportFieldFunctions.js +102 -0
  340. package/dist/utilities/getExportFieldFunctions.js.map +1 -0
  341. package/dist/utilities/getFilename.d.ts +6 -0
  342. package/dist/utilities/getFilename.d.ts.map +1 -0
  343. package/dist/utilities/getFilename.js +13 -0
  344. package/dist/utilities/getFilename.js.map +1 -0
  345. package/dist/utilities/getFlattenedFieldKeys.d.ts +24 -0
  346. package/dist/utilities/getFlattenedFieldKeys.d.ts.map +1 -0
  347. package/dist/utilities/getFlattenedFieldKeys.js +95 -0
  348. package/dist/utilities/getFlattenedFieldKeys.js.map +1 -0
  349. package/dist/utilities/getImportFieldFunctions.d.ts +12 -0
  350. package/dist/utilities/getImportFieldFunctions.d.ts.map +1 -0
  351. package/dist/utilities/getImportFieldFunctions.js +130 -0
  352. package/dist/utilities/getImportFieldFunctions.js.map +1 -0
  353. package/dist/utilities/getPluginCollections.d.ts +39 -0
  354. package/dist/utilities/getPluginCollections.d.ts.map +1 -0
  355. package/dist/utilities/getPluginCollections.js +102 -0
  356. package/dist/utilities/getPluginCollections.js.map +1 -0
  357. package/dist/utilities/getSchemaColumns.d.ts +43 -0
  358. package/dist/utilities/getSchemaColumns.d.ts.map +1 -0
  359. package/dist/utilities/getSchemaColumns.js +163 -0
  360. package/dist/utilities/getSchemaColumns.js.map +1 -0
  361. package/dist/utilities/getSelect.d.ts +11 -0
  362. package/dist/utilities/getSelect.d.ts.map +1 -0
  363. package/dist/utilities/getSelect.js +27 -0
  364. package/dist/utilities/getSelect.js.map +1 -0
  365. package/dist/utilities/getvalueAtPath.d.ts +15 -0
  366. package/dist/utilities/getvalueAtPath.d.ts.map +1 -0
  367. package/dist/utilities/getvalueAtPath.js +49 -0
  368. package/dist/utilities/getvalueAtPath.js.map +1 -0
  369. package/dist/utilities/parseCSV.d.ts +11 -0
  370. package/dist/utilities/parseCSV.d.ts.map +1 -0
  371. package/dist/utilities/parseCSV.js +67 -0
  372. package/dist/utilities/parseCSV.js.map +1 -0
  373. package/dist/utilities/parseCSV.spec.js +169 -0
  374. package/dist/utilities/parseCSV.spec.js.map +1 -0
  375. package/dist/utilities/parseJSON.d.ts +11 -0
  376. package/dist/utilities/parseJSON.d.ts.map +1 -0
  377. package/dist/utilities/parseJSON.js +25 -0
  378. package/dist/utilities/parseJSON.js.map +1 -0
  379. package/dist/utilities/processRichTextField.d.ts +6 -0
  380. package/dist/utilities/processRichTextField.d.ts.map +1 -0
  381. package/dist/utilities/processRichTextField.js +45 -0
  382. package/dist/utilities/processRichTextField.js.map +1 -0
  383. package/dist/utilities/removeDisabledFields.d.ts +15 -0
  384. package/dist/utilities/removeDisabledFields.d.ts.map +1 -0
  385. package/dist/utilities/removeDisabledFields.js +66 -0
  386. package/dist/utilities/removeDisabledFields.js.map +1 -0
  387. package/dist/utilities/setNestedValue.d.ts +19 -0
  388. package/dist/utilities/setNestedValue.d.ts.map +1 -0
  389. package/dist/utilities/setNestedValue.js +55 -0
  390. package/dist/utilities/setNestedValue.js.map +1 -0
  391. package/dist/utilities/sortHelpers.d.ts +6 -0
  392. package/dist/utilities/sortHelpers.d.ts.map +1 -0
  393. package/dist/utilities/sortHelpers.js +14 -0
  394. package/dist/utilities/sortHelpers.js.map +1 -0
  395. package/dist/utilities/unflattenObject.d.ts +11 -0
  396. package/dist/utilities/unflattenObject.d.ts.map +1 -0
  397. package/dist/utilities/unflattenObject.js +431 -0
  398. package/dist/utilities/unflattenObject.js.map +1 -0
  399. package/dist/utilities/unflattenObject.spec.js +680 -0
  400. package/dist/utilities/unflattenObject.spec.js.map +1 -0
  401. package/dist/utilities/useBatchProcessor.d.ts +103 -0
  402. package/dist/utilities/useBatchProcessor.d.ts.map +1 -0
  403. package/dist/utilities/useBatchProcessor.js +88 -0
  404. package/dist/utilities/useBatchProcessor.js.map +1 -0
  405. package/dist/utilities/validateLimitValue.d.ts +3 -0
  406. package/dist/utilities/validateLimitValue.d.ts.map +1 -0
  407. package/dist/utilities/validateLimitValue.js +12 -0
  408. package/dist/utilities/validateLimitValue.js.map +1 -0
  409. package/license.md +22 -0
  410. package/package.json +90 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/ImportPreview/index.tsx"],"sourcesContent":["'use client'\nimport type { Column } from '@ruya.sa/ui'\nimport type { ClientField, ConditionalDateProps, PaginatedDocs } from '@ruya.sa/payload'\n\nimport { getTranslation } from '@ruya.sa/translations'\nimport {\n Pagination,\n PerPage,\n Table,\n Translation,\n useConfig,\n useDebouncedEffect,\n useDocumentInfo,\n useField,\n useFormFields,\n useTranslation,\n} from '@ruya.sa/ui'\nimport { formatDocTitle } from '@ruya.sa/ui/shared'\nimport { fieldAffectsData } from '@ruya.sa/payload/shared'\nimport React, { useState, useTransition } from 'react'\n\nimport type {\n PluginImportExportTranslationKeys,\n PluginImportExportTranslations,\n} from '../../translations/index.js'\nimport type { ImportPreviewResponse } from '../../types.js'\n\nimport { DEFAULT_PREVIEW_LIMIT, PREVIEW_LIMIT_OPTIONS } from '../../constants.js'\nimport './index.scss'\n\nconst baseClass = 'import-preview'\n\nexport const ImportPreview: React.FC = () => {\n const [isPending, startTransition] = useTransition()\n const {\n config,\n config: { routes },\n } = useConfig()\n const { collectionSlug } = useDocumentInfo()\n const { i18n, t } = useTranslation<\n PluginImportExportTranslations,\n PluginImportExportTranslationKeys\n >()\n\n const { value: targetCollectionSlug } = useField<string>({ path: 'collectionSlug' })\n const { value: importMode } = useField<string>({ path: 'importMode' })\n const { value: matchField } = useField<string>({ path: 'matchField' })\n const { value: filename } = useField<string>({ path: 'filename' })\n const { value: url } = useField<string>({ path: 'url' })\n const { value: mimeType } = useField<string>({ path: 'mimeType' })\n const { value: status } = useField<string>({ path: 'status' })\n const { value: summary } = useField<any>({ path: 'summary' })\n\n // Access the file field directly from form fields\n const fileField = useFormFields(([fields]) => fields?.file || null)\n\n const [dataToRender, setDataToRender] = useState<Record<string, unknown>[]>([])\n const [columns, setColumns] = useState<Column[]>([])\n const [totalDocs, setTotalDocs] = useState<number>(0)\n const [error, setError] = useState<null | string>(null)\n\n // Preview pagination state\n const [previewPage, setPreviewPage] = useState(1)\n const [previewLimit, setPreviewLimit] = useState(DEFAULT_PREVIEW_LIMIT)\n const [paginationData, setPaginationData] = useState<null | Pick<\n PaginatedDocs,\n 'hasNextPage' | 'hasPrevPage' | 'limit' | 'nextPage' | 'page' | 'prevPage' | 'totalPages'\n >>(null)\n\n const collectionConfig = React.useMemo(\n () => config.collections.find((c) => c.slug === targetCollectionSlug),\n [targetCollectionSlug, config.collections],\n )\n\n useDebouncedEffect(\n () => {\n if (!collectionSlug || !targetCollectionSlug) {\n return\n }\n\n if (!targetCollectionSlug || (!url && !fileField?.value)) {\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n return\n }\n\n if (!collectionConfig) {\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n return\n }\n\n const abortController = new AbortController()\n\n const processFileData = async () => {\n setError(null)\n\n try {\n // Determine format from file\n let format: 'csv' | 'json' = 'json'\n if (fileField?.value && fileField.value instanceof File) {\n const file = fileField.value\n format = file.type === 'text/csv' || file.name?.endsWith('.csv') ? 'csv' : 'json'\n } else if (mimeType === 'text/csv' || filename?.endsWith('.csv')) {\n format = 'csv'\n }\n\n // Get file data as base64\n let fileData: string | undefined\n\n if (fileField?.value && fileField.value instanceof File) {\n // File is being uploaded, read its contents\n const arrayBuffer = await fileField.value.arrayBuffer()\n const base64 = Buffer.from(arrayBuffer).toString('base64')\n fileData = base64\n } else if (url) {\n // File has been saved, fetch from URL\n const response = await fetch(url, { signal: abortController.signal })\n if (!response.ok) {\n throw new Error('Failed to fetch file')\n }\n const arrayBuffer = await response.arrayBuffer()\n const base64 = Buffer.from(arrayBuffer).toString('base64')\n fileData = base64\n }\n\n if (!fileData) {\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n return\n }\n\n // Fetch transformed data from the server\n const res = await fetch(`${routes.api}/${collectionSlug}/preview-data`, {\n body: JSON.stringify({\n collectionSlug: targetCollectionSlug,\n fileData,\n format,\n previewLimit,\n previewPage,\n }),\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n method: 'POST',\n signal: abortController.signal,\n })\n\n if (!res.ok) {\n throw new Error('Failed to process file')\n }\n\n const {\n docs,\n hasNextPage,\n hasPrevPage,\n limit: responseLimit,\n page: responsePage,\n totalDocs: serverTotalDocs,\n totalPages,\n }: ImportPreviewResponse = await res.json()\n\n setTotalDocs(serverTotalDocs)\n setPaginationData({\n hasNextPage,\n hasPrevPage,\n limit: responseLimit,\n nextPage: responsePage + 1,\n page: responsePage,\n prevPage: responsePage - 1,\n totalPages,\n })\n\n if (!Array.isArray(docs) || docs.length === 0) {\n setDataToRender([])\n setColumns([])\n return\n }\n\n // Build columns from collection fields without traverseFields\n const buildColumnsFromFields = (\n fields: ClientField[],\n parentPath = '',\n parentLabel = '',\n ): Column[] => {\n const cols: Column[] = []\n\n fields.forEach((field) => {\n if (!fieldAffectsData(field) || field.admin?.disabled) {\n return\n }\n\n // Build the field path\n const fieldPath = parentPath ? `${parentPath}.${field.name}` : field.name\n\n // Get the field label\n let label = field.name\n if ('label' in field && field.label) {\n label = getTranslation(field.label, i18n)\n }\n\n // Add parent label prefix if in a group\n if (parentLabel) {\n label = `${parentLabel} > ${label}`\n }\n\n // Skip if this field doesn't exist in any document\n const hasData = docs.some((doc) => {\n const value = getValueAtPath(doc, fieldPath)\n return value !== undefined && value !== null\n })\n\n if (!hasData && field.type !== 'relationship') {\n return\n }\n\n cols.push({\n accessor: fieldPath,\n active: true,\n field,\n Heading: label,\n renderedCells: docs.map((doc) => {\n const value = getValueAtPath(doc, fieldPath)\n\n if (value === undefined || value === null) {\n return null\n }\n\n // Format based on field type\n if (field.type === 'relationship' || field.type === 'upload') {\n // Handle relationships\n if (typeof value === 'object' && !Array.isArray(value)) {\n // Single relationship\n const relationTo = Array.isArray(field.relationTo)\n ? (value as any).relationTo\n : field.relationTo\n\n const relatedConfig = config.collections.find((c) => c.slug === relationTo)\n if (relatedConfig && relatedConfig.admin?.useAsTitle) {\n const titleValue = (value as any)[relatedConfig.admin.useAsTitle]\n if (titleValue) {\n return formatDocTitle({\n collectionConfig: relatedConfig,\n data: value as any,\n dateFormat: config.admin.dateFormat,\n i18n,\n })\n }\n }\n\n // Fallback to ID\n const id = (value as any).id || value\n return `${getTranslation(relatedConfig?.labels?.singular || relationTo, i18n)}: ${id}`\n } else if (Array.isArray(value)) {\n // Multiple relationships\n return value\n .map((item) => {\n if (typeof item === 'object') {\n const relationTo = Array.isArray(field.relationTo)\n ? item.relationTo\n : field.relationTo\n const relatedConfig = config.collections.find(\n (c) => c.slug === relationTo,\n )\n\n if (relatedConfig && relatedConfig.admin?.useAsTitle) {\n const titleValue = item[relatedConfig.admin.useAsTitle]\n if (titleValue) {\n return formatDocTitle({\n collectionConfig: relatedConfig,\n data: item,\n dateFormat: config.admin.dateFormat,\n i18n,\n })\n }\n }\n\n return item.id || item\n }\n return item\n })\n .join(', ')\n }\n\n // Just an ID\n return String(value)\n } else if (field.type === 'date') {\n // Format dates\n const dateFormat =\n (field.admin &&\n 'date' in field.admin &&\n (field.admin.date as ConditionalDateProps)?.displayFormat) ||\n config.admin.dateFormat\n\n return new Date(value as string).toLocaleString(i18n.language, {\n dateStyle: 'medium',\n timeStyle: 'short',\n })\n } else if (field.type === 'checkbox') {\n return value ? '✓' : '✗'\n } else if (field.type === 'select' || field.type === 'radio') {\n // Show the label for select/radio options\n const option = field.options?.find((opt) => {\n if (typeof opt === 'string') {\n return opt === value\n }\n return opt.value === value\n })\n\n if (option && typeof option === 'object') {\n return getTranslation(option.label, i18n)\n }\n return String(value)\n } else if (field.type === 'number') {\n return String(value)\n } else if (Array.isArray(value)) {\n // Handle arrays\n if (field.type === 'blocks') {\n return value.map((block: any) => `${block.blockType || 'Block'}`).join(', ')\n }\n return `[${value.length} items]`\n } else if (typeof value === 'object') {\n // Handle objects\n if (field.type === 'group') {\n return '{...}'\n }\n return JSON.stringify(value)\n }\n\n return String(value)\n }),\n })\n\n // For groups, add nested fields with parent label\n if (field.type === 'group' && 'fields' in field) {\n const groupLabel =\n 'label' in field && field.label ? getTranslation(field.label, i18n) : field.name\n\n const nestedCols = buildColumnsFromFields(\n field.fields,\n fieldPath,\n parentLabel ? `${parentLabel} > ${groupLabel}` : groupLabel,\n )\n cols.push(...nestedCols)\n }\n\n // For tabs, process the fields within\n if ('tabs' in field && Array.isArray(field.tabs)) {\n field.tabs.forEach((tab) => {\n if ('name' in tab && tab.name) {\n // Named tab\n const tabPath = parentPath ? `${parentPath}.${tab.name}` : tab.name\n const tabLabel =\n 'label' in tab && tab.label ? getTranslation(tab.label, i18n) : tab.name\n\n const tabCols = buildColumnsFromFields(\n tab.fields,\n tabPath,\n parentLabel ? `${parentLabel} > ${tabLabel}` : tabLabel,\n )\n cols.push(...tabCols)\n } else {\n // Unnamed tab - fields go directly under parent\n const tabLabel =\n 'label' in tab && tab.label ? getTranslation(tab.label, i18n) : ''\n\n const tabCols = buildColumnsFromFields(\n tab.fields,\n parentPath,\n tabLabel && typeof tabLabel === 'string' && parentLabel\n ? `${parentLabel} > ${tabLabel}`\n : typeof tabLabel === 'string'\n ? tabLabel\n : parentLabel,\n )\n cols.push(...tabCols)\n }\n })\n }\n })\n\n return cols\n }\n\n // Add default meta fields at the end\n const fieldColumns = buildColumnsFromFields(collectionConfig.fields)\n const metaFields = ['id', 'createdAt', 'updatedAt', '_status']\n\n metaFields.forEach((metaField) => {\n const hasData = docs.some((doc) => doc[metaField] !== undefined)\n if (!hasData) {\n return\n }\n\n fieldColumns.push({\n accessor: metaField,\n active: true,\n field: { name: metaField } as ClientField,\n Heading: getTranslation(metaField, i18n),\n renderedCells: docs.map((doc) => {\n const value = doc[metaField]\n if (value === undefined || value === null) {\n return null\n }\n\n if (metaField === 'createdAt' || metaField === 'updatedAt') {\n return new Date(value as string).toLocaleString(i18n.language, {\n dateStyle: 'medium',\n timeStyle: 'short',\n })\n }\n\n return String(value)\n }),\n })\n })\n\n setColumns(fieldColumns)\n setDataToRender(docs)\n } catch (err) {\n console.error('Error processing file data:', err)\n setError(err instanceof Error ? err.message : 'Failed to load preview')\n setDataToRender([])\n setColumns([])\n setTotalDocs(0)\n setPaginationData(null)\n }\n }\n\n startTransition(async () => await processFileData())\n\n return () => {\n if (!abortController.signal.aborted) {\n abortController.abort('Component unmounted')\n }\n }\n },\n [\n collectionSlug,\n targetCollectionSlug,\n url,\n filename,\n mimeType,\n fileField?.value,\n collectionConfig,\n config,\n i18n,\n previewLimit,\n previewPage,\n routes.api,\n ],\n 500,\n )\n\n // If import has been processed, show results instead of preview\n if (status !== 'pending' && summary) {\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <h3>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:importResults\" t={t} />\n </h3>\n </div>\n <div className={`${baseClass}__results`}>\n <p>\n <strong>Status:</strong> {status}\n </p>\n <p>\n <strong>Imported:</strong> {summary.imported || 0}\n </p>\n <p>\n <strong>Updated:</strong> {summary.updated || 0}\n </p>\n <p>\n <strong>Total:</strong> {summary.total || 0}\n </p>\n {summary.issues > 0 && (\n <p>\n <strong>Issues:</strong> {summary.issues}\n </p>\n )}\n {summary.issueDetails && summary.issueDetails.length > 0 && (\n <div style={{ marginTop: '1rem' }}>\n <strong>Issue Details:</strong>\n <ul style={{ marginTop: '0.5rem' }}>\n {summary.issueDetails.slice(0, 10).map((issue: any, index: number) => (\n <li key={index}>\n Row {issue.row}: {issue.error}\n </li>\n ))}\n {summary.issueDetails.length > 10 && (\n <li>... and {summary.issueDetails.length - 10} more issues</li>\n )}\n </ul>\n </div>\n )}\n </div>\n </div>\n )\n }\n\n if (!targetCollectionSlug) {\n return (\n <div className={baseClass}>\n <p style={{ opacity: 0.6 }}>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:collectionRequired\" t={t} />\n </p>\n </div>\n )\n }\n\n if (error) {\n return (\n <div className={baseClass}>\n <p style={{ color: 'red' }}>\n <Translation i18nKey=\"general:error\" t={t} />: {error}\n </p>\n </div>\n )\n }\n\n if (!url && !fileField?.value) {\n return (\n <div className={baseClass}>\n <p style={{ opacity: 0.6 }}>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:uploadFileToSeePreview\" t={t} />\n </p>\n </div>\n )\n }\n\n const handlePageChange = (page: number) => {\n setPreviewPage(page)\n }\n\n const handlePerPageChange = (newLimit: number) => {\n setPreviewLimit(newLimit)\n setPreviewPage(1)\n }\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__header`}>\n <h3>\n <Translation i18nKey=\"version:preview\" t={t} />\n </h3>\n {totalDocs > 0 && !isPending && (\n <div className={`${baseClass}__info`}>\n <span className={`${baseClass}__import-count`}>\n <Translation\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n i18nKey=\"plugin-import-export:documentsToImport\"\n t={t}\n variables={{\n count: totalDocs,\n }}\n />\n </span>\n {' | '}\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:mode\" t={t} />: {importMode || 'create'}\n {importMode !== 'create' && (\n <>\n {' | '}\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:matchBy\" t={t} />: {matchField || 'id'}\n </>\n )}\n </div>\n )}\n </div>\n {isPending && !dataToRender.length && (\n <div className={`${baseClass}__loading`}>\n <Translation i18nKey=\"general:loading\" t={t} />\n </div>\n )}\n {dataToRender.length > 0 && <Table columns={columns} data={dataToRender} />}\n {!isPending && dataToRender.length === 0 && targetCollectionSlug && (\n <p>\n {/* @ts-expect-error - translations are not typed in plugins */}\n <Translation i18nKey=\"plugin-import-export:noDataToPreview\" t={t} />\n </p>\n )}\n {paginationData && totalDocs > 0 && (\n <div className={`${baseClass}__pagination`}>\n {paginationData.totalPages > 1 && (\n <Pagination\n hasNextPage={paginationData.hasNextPage}\n hasPrevPage={paginationData.hasPrevPage}\n nextPage={paginationData.nextPage ?? undefined}\n numberOfNeighbors={1}\n onChange={handlePageChange}\n page={paginationData.page}\n prevPage={paginationData.prevPage ?? undefined}\n totalPages={paginationData.totalPages}\n />\n )}\n <span className={`${baseClass}__page-info`}>\n <Translation\n // @ts-expect-error - plugin translations not typed\n i18nKey=\"plugin-import-export:previewPageInfo\"\n t={t}\n variables={{\n end: Math.min((paginationData.page ?? 1) * previewLimit, totalDocs),\n start: ((paginationData.page ?? 1) - 1) * previewLimit + 1,\n total: totalDocs,\n }}\n />\n </span>\n <PerPage\n handleChange={handlePerPageChange}\n limit={previewLimit}\n limits={PREVIEW_LIMIT_OPTIONS}\n />\n </div>\n )}\n </div>\n )\n}\n\n// Helper function to get nested values\nconst getValueAtPath = (obj: Record<string, unknown>, path: string): unknown => {\n const segments = path.split('.')\n let current: any = obj\n\n for (const segment of segments) {\n if (current === null || current === undefined) {\n return undefined\n }\n current = current[segment]\n }\n\n return current\n}\n"],"names":["getTranslation","Pagination","PerPage","Table","Translation","useConfig","useDebouncedEffect","useDocumentInfo","useField","useFormFields","useTranslation","formatDocTitle","fieldAffectsData","React","useState","useTransition","DEFAULT_PREVIEW_LIMIT","PREVIEW_LIMIT_OPTIONS","baseClass","ImportPreview","isPending","startTransition","config","routes","collectionSlug","i18n","t","value","targetCollectionSlug","path","importMode","matchField","filename","url","mimeType","status","summary","fileField","fields","file","dataToRender","setDataToRender","columns","setColumns","totalDocs","setTotalDocs","error","setError","previewPage","setPreviewPage","previewLimit","setPreviewLimit","paginationData","setPaginationData","collectionConfig","useMemo","collections","find","c","slug","abortController","AbortController","processFileData","format","File","type","name","endsWith","fileData","arrayBuffer","base64","Buffer","from","toString","response","fetch","signal","ok","Error","res","api","body","JSON","stringify","credentials","headers","method","docs","hasNextPage","hasPrevPage","limit","responseLimit","page","responsePage","serverTotalDocs","totalPages","json","nextPage","prevPage","Array","isArray","length","buildColumnsFromFields","parentPath","parentLabel","cols","forEach","field","admin","disabled","fieldPath","label","hasData","some","doc","getValueAtPath","undefined","push","accessor","active","Heading","renderedCells","map","relationTo","relatedConfig","useAsTitle","titleValue","data","dateFormat","id","labels","singular","item","join","String","date","displayFormat","Date","toLocaleString","language","dateStyle","timeStyle","option","options","opt","block","blockType","groupLabel","nestedCols","tabs","tab","tabPath","tabLabel","tabCols","fieldColumns","metaFields","metaField","err","console","message","aborted","abort","div","className","h3","i18nKey","p","strong","imported","updated","total","issues","issueDetails","style","marginTop","ul","slice","issue","index","li","row","opacity","color","handlePageChange","handlePerPageChange","newLimit","span","variables","count","numberOfNeighbors","onChange","end","Math","min","start","handleChange","limits","obj","segments","split","current","segment"],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ @layer payload-default {
2
+ .import-preview {
3
+ &__header {
4
+ display: flex;
5
+ justify-content: space-between;
6
+ align-items: flex-end;
7
+ margin-bottom: 10px;
8
+ }
9
+
10
+ &__info {
11
+ font-size: var(--font-size-small);
12
+ color: var(--theme-elevation-500);
13
+ }
14
+
15
+ &__import-count {
16
+ font-size: var(--font-size-small);
17
+ color: var(--theme-elevation-500);
18
+ }
19
+
20
+ &__pagination {
21
+ display: flex;
22
+ align-items: center;
23
+ justify-content: space-between;
24
+ gap: var(--base);
25
+ margin-top: var(--base);
26
+ padding-top: var(--base);
27
+ border-top: 1px solid var(--theme-elevation-100);
28
+
29
+ // When only PerPage is present (no Pagination), keep it on the right
30
+ .per-page:only-child {
31
+ margin-left: auto;
32
+ }
33
+ }
34
+
35
+ &__page-info {
36
+ font-size: var(--font-size-small);
37
+ color: var(--theme-elevation-500);
38
+ white-space: nowrap;
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,2 @@
1
+ export declare const ImportSaveButton: React.FC;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ImportSaveButton/index.tsx"],"names":[],"mappings":"AASA,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAUpC,CAAA"}
@@ -0,0 +1,18 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { SaveButton, useField, useTranslation } from '@ruya.sa/ui';
4
+ export const ImportSaveButton = ()=>{
5
+ const { t } = useTranslation();
6
+ const { value: status } = useField({
7
+ path: 'status'
8
+ });
9
+ // Only show the button if status is pending
10
+ if (status !== 'pending') {
11
+ return null;
12
+ }
13
+ return /*#__PURE__*/ _jsx(SaveButton, {
14
+ label: t('plugin-import-export:startImport')
15
+ });
16
+ };
17
+
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/ImportSaveButton/index.tsx"],"sourcesContent":["'use client'\n\nimport { SaveButton, useField, useTranslation } from '@ruya.sa/ui'\n\nimport type {\n PluginImportExportTranslationKeys,\n PluginImportExportTranslations,\n} from '../../translations/index.js'\n\nexport const ImportSaveButton: React.FC = () => {\n const { t } = useTranslation<PluginImportExportTranslations, PluginImportExportTranslationKeys>()\n const { value: status } = useField<string>({ path: 'status' })\n\n // Only show the button if status is pending\n if (status !== 'pending') {\n return null\n }\n\n return <SaveButton label={t('plugin-import-export:startImport')} />\n}\n"],"names":["SaveButton","useField","useTranslation","ImportSaveButton","t","value","status","path","label"],"mappings":"AAAA;;AAEA,SAASA,UAAU,EAAEC,QAAQ,EAAEC,cAAc,QAAQ,cAAa;AAOlE,OAAO,MAAMC,mBAA6B;IACxC,MAAM,EAAEC,CAAC,EAAE,GAAGF;IACd,MAAM,EAAEG,OAAOC,MAAM,EAAE,GAAGL,SAAiB;QAAEM,MAAM;IAAS;IAE5D,4CAA4C;IAC5C,IAAID,WAAW,WAAW;QACxB,OAAO;IACT;IAEA,qBAAO,KAACN;QAAWQ,OAAOJ,EAAE;;AAC9B,EAAC"}
@@ -0,0 +1,4 @@
1
+ import type { NumberFieldClientComponent } from '@ruya.sa/payload';
2
+ import './index.scss';
3
+ export declare const Page: NumberFieldClientComponent;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Page/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAKlE,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,IAAI,EAAE,0BA6BlB,CAAA"}
@@ -0,0 +1,40 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { NumberField, useField } from '@ruya.sa/ui';
4
+ import React, { useEffect } from 'react';
5
+ import './index.scss';
6
+ const baseClass = 'page-field';
7
+ export const Page = (props)=>{
8
+ const { setValue } = useField();
9
+ const { value: limitValue } = useField({
10
+ path: 'limit'
11
+ });
12
+ // Effect to reset page to 1 if limit is removed
13
+ useEffect(()=>{
14
+ if (!limitValue) {
15
+ setValue(1); // Reset page to 1
16
+ }
17
+ }, [
18
+ limitValue,
19
+ setValue
20
+ ]);
21
+ return /*#__PURE__*/ _jsx("div", {
22
+ className: baseClass,
23
+ children: /*#__PURE__*/ _jsx(NumberField, {
24
+ field: {
25
+ name: props.field.name,
26
+ admin: {
27
+ autoComplete: undefined,
28
+ placeholder: undefined,
29
+ step: 1
30
+ },
31
+ label: props.field.label,
32
+ min: 1
33
+ },
34
+ onChange: (value)=>setValue(value ?? 1),
35
+ path: props.path
36
+ })
37
+ });
38
+ };
39
+
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/Page/index.tsx"],"sourcesContent":["'use client'\n\nimport type { NumberFieldClientComponent } from '@ruya.sa/payload'\n\nimport { NumberField, useField } from '@ruya.sa/ui'\nimport React, { useEffect } from 'react'\n\nimport './index.scss'\n\nconst baseClass = 'page-field'\n\nexport const Page: NumberFieldClientComponent = (props) => {\n const { setValue } = useField<number>()\n const { value: limitValue } = useField<number>({ path: 'limit' })\n\n // Effect to reset page to 1 if limit is removed\n useEffect(() => {\n if (!limitValue) {\n setValue(1) // Reset page to 1\n }\n }, [limitValue, setValue])\n\n return (\n <div className={baseClass}>\n <NumberField\n field={{\n name: props.field.name,\n admin: {\n autoComplete: undefined,\n placeholder: undefined,\n step: 1,\n },\n label: props.field.label,\n min: 1,\n }}\n onChange={(value) => setValue(value ?? 1)} // Update the page value on change\n path={props.path}\n />\n </div>\n )\n}\n"],"names":["NumberField","useField","React","useEffect","baseClass","Page","props","setValue","value","limitValue","path","div","className","field","name","admin","autoComplete","undefined","placeholder","step","label","min","onChange"],"mappings":"AAAA;;AAIA,SAASA,WAAW,EAAEC,QAAQ,QAAQ,cAAa;AACnD,OAAOC,SAASC,SAAS,QAAQ,QAAO;AAExC,OAAO,eAAc;AAErB,MAAMC,YAAY;AAElB,OAAO,MAAMC,OAAmC,CAACC;IAC/C,MAAM,EAAEC,QAAQ,EAAE,GAAGN;IACrB,MAAM,EAAEO,OAAOC,UAAU,EAAE,GAAGR,SAAiB;QAAES,MAAM;IAAQ;IAE/D,gDAAgD;IAChDP,UAAU;QACR,IAAI,CAACM,YAAY;YACfF,SAAS,IAAG,kBAAkB;QAChC;IACF,GAAG;QAACE;QAAYF;KAAS;IAEzB,qBACE,KAACI;QAAIC,WAAWR;kBACd,cAAA,KAACJ;YACCa,OAAO;gBACLC,MAAMR,MAAMO,KAAK,CAACC,IAAI;gBACtBC,OAAO;oBACLC,cAAcC;oBACdC,aAAaD;oBACbE,MAAM;gBACR;gBACAC,OAAOd,MAAMO,KAAK,CAACO,KAAK;gBACxBC,KAAK;YACP;YACAC,UAAU,CAACd,QAAUD,SAASC,SAAS;YACvCE,MAAMJ,MAAMI,IAAI;;;AAIxB,EAAC"}
@@ -0,0 +1,5 @@
1
+ @layer payload-default {
2
+ .page-field {
3
+ --field-width: 33.3333%;
4
+ }
5
+ }
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ export declare const SelectionToUseField: React.FC;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/SelectionToUseField/index.tsx"],"names":[],"mappings":"AAYA,OAAO,KAA6B,MAAM,OAAO,CAAA;AAkBjD,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAmGvC,CAAA"}
@@ -0,0 +1,128 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { RadioGroupField, useDocumentInfo, useField, useListQuery, useSelection, useTranslation } from '@ruya.sa/ui';
4
+ import React, { useEffect, useMemo } from 'react';
5
+ const isWhereEmpty = (where)=>{
6
+ if (!where || typeof where !== 'object') {
7
+ return true;
8
+ }
9
+ // Flatten one level of OR/AND wrappers
10
+ if (Array.isArray(where.and)) {
11
+ return where.and.length === 0;
12
+ }
13
+ if (Array.isArray(where.or)) {
14
+ return where.or.length === 0;
15
+ }
16
+ return Object.keys(where).length === 0;
17
+ };
18
+ export const SelectionToUseField = ()=>{
19
+ const { id } = useDocumentInfo();
20
+ const { query } = useListQuery();
21
+ const { selectAll, selected } = useSelection();
22
+ const { t } = useTranslation();
23
+ const { setValue: setSelectionToUseValue, value: selectionToUseValue } = useField({
24
+ path: 'selectionToUse'
25
+ });
26
+ const { setValue: setWhere } = useField({
27
+ path: 'where'
28
+ });
29
+ const hasMeaningfulFilters = query?.where && !isWhereEmpty(query.where);
30
+ const availableOptions = useMemo(()=>{
31
+ const options = [
32
+ {
33
+ // @ts-expect-error - this is not correctly typed in plugins right now
34
+ label: t('plugin-import-export:selectionToUse-allDocuments'),
35
+ value: 'all'
36
+ }
37
+ ];
38
+ if (hasMeaningfulFilters) {
39
+ options.unshift({
40
+ // @ts-expect-error - this is not correctly typed in plugins right now
41
+ label: t('plugin-import-export:selectionToUse-currentFilters'),
42
+ value: 'currentFilters'
43
+ });
44
+ }
45
+ if ([
46
+ 'allInPage',
47
+ 'some'
48
+ ].includes(selectAll)) {
49
+ options.unshift({
50
+ // @ts-expect-error - this is not correctly typed in plugins right now
51
+ label: t('plugin-import-export:selectionToUse-currentSelection'),
52
+ value: 'currentSelection'
53
+ });
54
+ }
55
+ return options;
56
+ }, [
57
+ hasMeaningfulFilters,
58
+ selectAll,
59
+ t
60
+ ]);
61
+ // Auto-set default
62
+ useEffect(()=>{
63
+ if (id) {
64
+ return;
65
+ }
66
+ let defaultSelection = 'all';
67
+ if ([
68
+ 'allInPage',
69
+ 'some'
70
+ ].includes(selectAll)) {
71
+ defaultSelection = 'currentSelection';
72
+ } else if (query?.where) {
73
+ defaultSelection = 'currentFilters';
74
+ }
75
+ setSelectionToUseValue(defaultSelection);
76
+ }, [
77
+ id,
78
+ selectAll,
79
+ query?.where,
80
+ setSelectionToUseValue
81
+ ]);
82
+ // Sync where clause with selected option
83
+ useEffect(()=>{
84
+ if (id) {
85
+ return;
86
+ }
87
+ if (selectionToUseValue === 'currentFilters' && query?.where) {
88
+ setWhere(query.where);
89
+ } else if (selectionToUseValue === 'currentSelection' && selected) {
90
+ const ids = [
91
+ ...selected.entries()
92
+ ].filter(([_, isSelected])=>isSelected).map(([id])=>id);
93
+ setWhere({
94
+ id: {
95
+ in: ids
96
+ }
97
+ });
98
+ } else if (selectionToUseValue === 'all') {
99
+ setWhere({});
100
+ }
101
+ }, [
102
+ id,
103
+ selectionToUseValue,
104
+ query?.where,
105
+ selected,
106
+ setWhere
107
+ ]);
108
+ // Hide component if no other options besides "all" are available
109
+ if (availableOptions.length <= 1) {
110
+ return null;
111
+ }
112
+ return /*#__PURE__*/ _jsx(RadioGroupField, {
113
+ field: {
114
+ name: 'selectionToUse',
115
+ type: 'radio',
116
+ admin: {},
117
+ // @ts-expect-error - this is not correctly typed in plugins right now
118
+ label: t('plugin-import-export:field-selectionToUse-label'),
119
+ options: availableOptions
120
+ },
121
+ // @ts-expect-error - this is not correctly typed in plugins right now
122
+ label: t('plugin-import-export:field-selectionToUse-label'),
123
+ options: availableOptions,
124
+ path: "selectionToUse"
125
+ });
126
+ };
127
+
128
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/SelectionToUseField/index.tsx"],"sourcesContent":["'use client'\n\nimport type { Where } from '@ruya.sa/payload'\n\nimport {\n RadioGroupField,\n useDocumentInfo,\n useField,\n useListQuery,\n useSelection,\n useTranslation,\n} from '@ruya.sa/ui'\nimport React, { useEffect, useMemo } from 'react'\n\nconst isWhereEmpty = (where: Where): boolean => {\n if (!where || typeof where !== 'object') {\n return true\n }\n\n // Flatten one level of OR/AND wrappers\n if (Array.isArray(where.and)) {\n return where.and.length === 0\n }\n if (Array.isArray(where.or)) {\n return where.or.length === 0\n }\n\n return Object.keys(where).length === 0\n}\n\nexport const SelectionToUseField: React.FC = () => {\n const { id } = useDocumentInfo()\n const { query } = useListQuery()\n const { selectAll, selected } = useSelection()\n const { t } = useTranslation()\n\n const { setValue: setSelectionToUseValue, value: selectionToUseValue } = useField({\n path: 'selectionToUse',\n })\n\n const { setValue: setWhere } = useField({\n path: 'where',\n })\n\n const hasMeaningfulFilters = query?.where && !isWhereEmpty(query.where)\n\n const availableOptions = useMemo(() => {\n const options = [\n {\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: t('plugin-import-export:selectionToUse-allDocuments'),\n value: 'all',\n },\n ]\n\n if (hasMeaningfulFilters) {\n options.unshift({\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: t('plugin-import-export:selectionToUse-currentFilters'),\n value: 'currentFilters',\n })\n }\n\n if (['allInPage', 'some'].includes(selectAll)) {\n options.unshift({\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: t('plugin-import-export:selectionToUse-currentSelection'),\n value: 'currentSelection',\n })\n }\n\n return options\n }, [hasMeaningfulFilters, selectAll, t])\n\n // Auto-set default\n useEffect(() => {\n if (id) {\n return\n }\n\n let defaultSelection: 'all' | 'currentFilters' | 'currentSelection' = 'all'\n\n if (['allInPage', 'some'].includes(selectAll)) {\n defaultSelection = 'currentSelection'\n } else if (query?.where) {\n defaultSelection = 'currentFilters'\n }\n\n setSelectionToUseValue(defaultSelection)\n }, [id, selectAll, query?.where, setSelectionToUseValue])\n\n // Sync where clause with selected option\n useEffect(() => {\n if (id) {\n return\n }\n\n if (selectionToUseValue === 'currentFilters' && query?.where) {\n setWhere(query.where)\n } else if (selectionToUseValue === 'currentSelection' && selected) {\n const ids = [...selected.entries()].filter(([_, isSelected]) => isSelected).map(([id]) => id)\n\n setWhere({ id: { in: ids } })\n } else if (selectionToUseValue === 'all') {\n setWhere({})\n }\n }, [id, selectionToUseValue, query?.where, selected, setWhere])\n\n // Hide component if no other options besides \"all\" are available\n if (availableOptions.length <= 1) {\n return null\n }\n\n return (\n <RadioGroupField\n field={{\n name: 'selectionToUse',\n type: 'radio',\n admin: {},\n // @ts-expect-error - this is not correctly typed in plugins right now\n label: t('plugin-import-export:field-selectionToUse-label'),\n options: availableOptions,\n }}\n // @ts-expect-error - this is not correctly typed in plugins right now\n label={t('plugin-import-export:field-selectionToUse-label')}\n options={availableOptions}\n path=\"selectionToUse\"\n />\n )\n}\n"],"names":["RadioGroupField","useDocumentInfo","useField","useListQuery","useSelection","useTranslation","React","useEffect","useMemo","isWhereEmpty","where","Array","isArray","and","length","or","Object","keys","SelectionToUseField","id","query","selectAll","selected","t","setValue","setSelectionToUseValue","value","selectionToUseValue","path","setWhere","hasMeaningfulFilters","availableOptions","options","label","unshift","includes","defaultSelection","ids","entries","filter","_","isSelected","map","in","field","name","type","admin"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { SelectFieldClientComponent } from '@ruya.sa/payload';
2
+ import './index.scss';
3
+ export declare const SortBy: SelectFieldClientComponent;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/SortBy/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAgBlE,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,MAAM,EAAE,0BAqHpB,CAAA"}
@@ -0,0 +1,133 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { FieldLabel, ReactSelect, useConfig, useDocumentInfo, useField, useListQuery } from '@ruya.sa/ui';
4
+ import React, { useEffect, useMemo, useRef, useState } from 'react';
5
+ import { applySortOrder, normalizeQueryParam, stripSortDash } from '../../utilities/sortHelpers.js';
6
+ import { reduceFields } from '../FieldsToExport/reduceFields.js';
7
+ import { useImportExport } from '../ImportExportProvider/index.js';
8
+ import './index.scss';
9
+ const baseClass = 'sort-by-fields';
10
+ export const SortBy = (props)=>{
11
+ const { id } = useDocumentInfo();
12
+ // The "sort" text field that stores 'title' or '-title'
13
+ const { setValue: setSort, value: sortRaw } = useField();
14
+ // Sibling order field ('asc' | 'desc') used when writing sort on change
15
+ const { value: sortOrder = 'asc' } = useField({
16
+ path: 'sortOrder'
17
+ });
18
+ // Needed so we can initialize sortOrder when SortOrder component is hidden
19
+ const { setValue: setSortOrder } = useField({
20
+ path: 'sortOrder'
21
+ });
22
+ const { value: collectionSlug } = useField({
23
+ path: 'collectionSlug'
24
+ });
25
+ const { query } = useListQuery();
26
+ const { getEntityConfig } = useConfig();
27
+ const { collection } = useImportExport();
28
+ // ReactSelect's displayed option
29
+ const [displayedValue, setDisplayedValue] = useState(null);
30
+ const collectionConfig = getEntityConfig({
31
+ collectionSlug: collectionSlug ?? collection
32
+ });
33
+ const fieldOptions = useMemo(()=>reduceFields({
34
+ fields: collectionConfig?.fields
35
+ }), [
36
+ collectionConfig?.fields
37
+ ]);
38
+ // Normalize the stored value for display (strip the '-') and pick the option
39
+ useEffect(()=>{
40
+ const clean = stripSortDash(sortRaw);
41
+ if (!clean) {
42
+ setDisplayedValue(null);
43
+ return;
44
+ }
45
+ const option = fieldOptions.find((f)=>f.value === clean);
46
+ if (option && (!displayedValue || displayedValue.value !== clean)) {
47
+ setDisplayedValue(option);
48
+ }
49
+ }, [
50
+ sortRaw,
51
+ fieldOptions,
52
+ displayedValue
53
+ ]);
54
+ // One-time init guard so clearing `sort` doesn't rehydrate from query again
55
+ const didInitRef = useRef(false);
56
+ // Sync the visible select from list-view query sort (preferred) or groupBy (fallback)
57
+ // and initialize both `sort` and `sortOrder` here as SortOrder may be hidden by admin.condition.
58
+ useEffect(()=>{
59
+ if (didInitRef.current) {
60
+ return;
61
+ }
62
+ if (id) {
63
+ didInitRef.current = true;
64
+ return;
65
+ }
66
+ if (typeof sortRaw === 'string' && sortRaw.length > 0) {
67
+ // Already initialized elsewhere
68
+ didInitRef.current = true;
69
+ return;
70
+ }
71
+ const qsSort = normalizeQueryParam(query?.sort);
72
+ const qsGroupBy = normalizeQueryParam(query?.groupBy);
73
+ const source = qsSort ?? qsGroupBy;
74
+ if (!source) {
75
+ didInitRef.current = true;
76
+ return;
77
+ }
78
+ const isDesc = !!qsSort && qsSort.startsWith('-');
79
+ const base = stripSortDash(source);
80
+ const order = isDesc ? 'desc' : 'asc';
81
+ // Write BOTH fields so preview/export have the right values even if SortOrder is hidden
82
+ setSort(applySortOrder(base, order));
83
+ setSortOrder(order);
84
+ const option = fieldOptions.find((f)=>f.value === base);
85
+ if (option) {
86
+ setDisplayedValue(option);
87
+ }
88
+ didInitRef.current = true;
89
+ }, [
90
+ id,
91
+ query?.groupBy,
92
+ query?.sort,
93
+ sortRaw,
94
+ fieldOptions,
95
+ setSort,
96
+ setSortOrder
97
+ ]);
98
+ // When user selects a different field, store it with the current order applied
99
+ const onChange = (option)=>{
100
+ if (!option) {
101
+ setSort('');
102
+ setDisplayedValue(null);
103
+ } else {
104
+ setDisplayedValue(option);
105
+ const next = applySortOrder(option.value, String(sortOrder));
106
+ setSort(next);
107
+ }
108
+ };
109
+ return /*#__PURE__*/ _jsxs("div", {
110
+ className: baseClass,
111
+ children: [
112
+ /*#__PURE__*/ _jsx(FieldLabel, {
113
+ label: props.field.label,
114
+ path: props.path
115
+ }),
116
+ /*#__PURE__*/ _jsx(ReactSelect, {
117
+ className: baseClass,
118
+ disabled: props.readOnly,
119
+ getOptionValue: (option)=>String(option.value),
120
+ inputId: `field-${props.path.replace(/\./g, '__')}`,
121
+ isClearable: true,
122
+ isSortable: true,
123
+ // @ts-expect-error react select option
124
+ onChange: onChange,
125
+ options: fieldOptions,
126
+ // @ts-expect-error react select
127
+ value: displayedValue
128
+ })
129
+ ]
130
+ });
131
+ };
132
+
133
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/SortBy/index.tsx"],"sourcesContent":["'use client'\n\nimport type { SelectFieldClientComponent } from '@ruya.sa/payload'\nimport type { ReactNode } from 'react'\n\nimport {\n FieldLabel,\n ReactSelect,\n useConfig,\n useDocumentInfo,\n useField,\n useListQuery,\n} from '@ruya.sa/ui'\nimport React, { useEffect, useMemo, useRef, useState } from 'react'\n\nimport { applySortOrder, normalizeQueryParam, stripSortDash } from '../../utilities/sortHelpers.js'\nimport { reduceFields } from '../FieldsToExport/reduceFields.js'\nimport { useImportExport } from '../ImportExportProvider/index.js'\nimport './index.scss'\n\nconst baseClass = 'sort-by-fields'\n\nexport const SortBy: SelectFieldClientComponent = (props) => {\n const { id } = useDocumentInfo()\n\n // The \"sort\" text field that stores 'title' or '-title'\n const { setValue: setSort, value: sortRaw } = useField<string>()\n\n // Sibling order field ('asc' | 'desc') used when writing sort on change\n const { value: sortOrder = 'asc' } = useField<string>({ path: 'sortOrder' })\n // Needed so we can initialize sortOrder when SortOrder component is hidden\n const { setValue: setSortOrder } = useField<'asc' | 'desc'>({ path: 'sortOrder' })\n\n const { value: collectionSlug } = useField<string>({ path: 'collectionSlug' })\n const { query } = useListQuery()\n const { getEntityConfig } = useConfig()\n const { collection } = useImportExport()\n\n // ReactSelect's displayed option\n const [displayedValue, setDisplayedValue] = useState<{\n id: string\n label: ReactNode\n value: string\n } | null>(null)\n\n const collectionConfig = getEntityConfig({ collectionSlug: collectionSlug ?? collection })\n const fieldOptions = useMemo(\n () => reduceFields({ fields: collectionConfig?.fields }),\n [collectionConfig?.fields],\n )\n\n // Normalize the stored value for display (strip the '-') and pick the option\n useEffect(() => {\n const clean = stripSortDash(sortRaw)\n if (!clean) {\n setDisplayedValue(null)\n return\n }\n\n const option = fieldOptions.find((f) => f.value === clean)\n if (option && (!displayedValue || displayedValue.value !== clean)) {\n setDisplayedValue(option)\n }\n }, [sortRaw, fieldOptions, displayedValue])\n\n // One-time init guard so clearing `sort` doesn't rehydrate from query again\n const didInitRef = useRef(false)\n\n // Sync the visible select from list-view query sort (preferred) or groupBy (fallback)\n // and initialize both `sort` and `sortOrder` here as SortOrder may be hidden by admin.condition.\n useEffect(() => {\n if (didInitRef.current) {\n return\n }\n if (id) {\n didInitRef.current = true\n return\n }\n if (typeof sortRaw === 'string' && sortRaw.length > 0) {\n // Already initialized elsewhere\n didInitRef.current = true\n return\n }\n\n const qsSort = normalizeQueryParam(query?.sort)\n const qsGroupBy = normalizeQueryParam(query?.groupBy)\n\n const source = qsSort ?? qsGroupBy\n if (!source) {\n didInitRef.current = true\n return\n }\n\n const isDesc = !!qsSort && qsSort.startsWith('-')\n const base = stripSortDash(source)\n const order: 'asc' | 'desc' = isDesc ? 'desc' : 'asc'\n\n // Write BOTH fields so preview/export have the right values even if SortOrder is hidden\n setSort(applySortOrder(base, order))\n setSortOrder(order)\n\n const option = fieldOptions.find((f) => f.value === base)\n if (option) {\n setDisplayedValue(option)\n }\n\n didInitRef.current = true\n }, [id, query?.groupBy, query?.sort, sortRaw, fieldOptions, setSort, setSortOrder])\n\n // When user selects a different field, store it with the current order applied\n const onChange = (option: { id: string; label: ReactNode; value: string } | null) => {\n if (!option) {\n setSort('')\n setDisplayedValue(null)\n } else {\n setDisplayedValue(option)\n const next = applySortOrder(option.value, String(sortOrder) as 'asc' | 'desc')\n setSort(next)\n }\n }\n\n return (\n <div className={baseClass}>\n <FieldLabel label={props.field.label} path={props.path} />\n <ReactSelect\n className={baseClass}\n disabled={props.readOnly}\n getOptionValue={(option) => String(option.value)}\n inputId={`field-${props.path.replace(/\\./g, '__')}`}\n isClearable={true}\n isSortable={true}\n // @ts-expect-error react select option\n onChange={onChange}\n options={fieldOptions}\n // @ts-expect-error react select\n value={displayedValue}\n />\n </div>\n )\n}\n"],"names":["FieldLabel","ReactSelect","useConfig","useDocumentInfo","useField","useListQuery","React","useEffect","useMemo","useRef","useState","applySortOrder","normalizeQueryParam","stripSortDash","reduceFields","useImportExport","baseClass","SortBy","props","id","setValue","setSort","value","sortRaw","sortOrder","path","setSortOrder","collectionSlug","query","getEntityConfig","collection","displayedValue","setDisplayedValue","collectionConfig","fieldOptions","fields","clean","option","find","f","didInitRef","current","length","qsSort","sort","qsGroupBy","groupBy","source","isDesc","startsWith","base","order","onChange","next","String","div","className","label","field","disabled","readOnly","getOptionValue","inputId","replace","isClearable","isSortable","options"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ .sort-by-fields {
2
+ --field-width: 25%;
3
+ }
@@ -0,0 +1,4 @@
1
+ import type { SelectFieldClientComponent } from '@ruya.sa/payload';
2
+ import './index.scss';
3
+ export declare const SortOrder: SelectFieldClientComponent;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/SortOrder/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAMlE,OAAO,cAAc,CAAA;AAcrB,eAAO,MAAM,SAAS,EAAE,0BAuGvB,CAAA"}