@flexkit/studio 0.0.6 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/dist/asset-65455B7V.js +2 -0
  2. package/dist/{asset-F2SF5UHA.js.map → asset-65455B7V.js.map} +1 -1
  3. package/dist/astro.d.ts +68 -0
  4. package/dist/astro.js +45 -0
  5. package/dist/boolean-3ZHXDPHB.js +2 -0
  6. package/dist/{boolean-IUJXXA2D.js.map → boolean-3ZHXDPHB.js.map} +1 -1
  7. package/dist/chunk-2RBOTHKE.js +2 -0
  8. package/dist/{chunk-7ZFZY5R4.js.map → chunk-2RBOTHKE.js.map} +1 -1
  9. package/dist/chunk-2WWU4XFO.js +2 -0
  10. package/dist/chunk-2WWU4XFO.js.map +1 -0
  11. package/dist/chunk-4PHVU7DD.js +2 -0
  12. package/dist/{chunk-WEMBNSFH.js.map → chunk-4PHVU7DD.js.map} +1 -1
  13. package/dist/chunk-5ES3TTSY.js +2 -0
  14. package/dist/{chunk-OBWXS7PQ.js.map → chunk-5ES3TTSY.js.map} +1 -1
  15. package/dist/chunk-5MTVN77Y.js +2 -0
  16. package/dist/chunk-5MTVN77Y.js.map +1 -0
  17. package/dist/chunk-64KAF6GA.js +2 -0
  18. package/dist/chunk-64KAF6GA.js.map +1 -0
  19. package/dist/chunk-7YBJLUUE.js +3 -0
  20. package/dist/chunk-7YBJLUUE.js.map +1 -0
  21. package/dist/chunk-AXB7FQV2.js +2 -0
  22. package/dist/{chunk-A6DNMUGW.js.map → chunk-AXB7FQV2.js.map} +1 -1
  23. package/dist/chunk-AYKEFG4H.js +2 -0
  24. package/dist/chunk-AYKEFG4H.js.map +1 -0
  25. package/dist/chunk-D5N42D57.js +2 -0
  26. package/dist/chunk-D5N42D57.js.map +1 -0
  27. package/dist/chunk-HC5NUUAJ.js +2 -0
  28. package/dist/chunk-HC5NUUAJ.js.map +1 -0
  29. package/dist/chunk-HIMN6EYJ.js +2 -0
  30. package/dist/chunk-HIMN6EYJ.js.map +1 -0
  31. package/dist/chunk-K5CEPNVI.js +2 -0
  32. package/dist/{chunk-G3L524HS.js.map → chunk-K5CEPNVI.js.map} +1 -1
  33. package/dist/chunk-M6EIBKCQ.js +2 -0
  34. package/dist/{chunk-GHV46F5V.js.map → chunk-M6EIBKCQ.js.map} +1 -1
  35. package/dist/chunk-MOR653JA.js +2 -0
  36. package/dist/chunk-MOR653JA.js.map +1 -0
  37. package/dist/chunk-NJN7EGGK.js +2 -0
  38. package/dist/{chunk-PAAKWKLA.js.map → chunk-NJN7EGGK.js.map} +1 -1
  39. package/dist/chunk-OOYWOWHR.js +2 -0
  40. package/dist/{chunk-Z37UM6ED.js.map → chunk-OOYWOWHR.js.map} +1 -1
  41. package/dist/chunk-OTQ3BR2A.js +2 -0
  42. package/dist/chunk-OTQ3BR2A.js.map +1 -0
  43. package/dist/chunk-OX6FVDUT.js +2 -0
  44. package/dist/{chunk-UTZ7XOUK.js.map → chunk-OX6FVDUT.js.map} +1 -1
  45. package/dist/chunk-RMSYYUQM.js +2 -0
  46. package/dist/{chunk-OV2SJGU3.js.map → chunk-RMSYYUQM.js.map} +1 -1
  47. package/dist/chunk-TL6JXN6O.js +175 -0
  48. package/dist/chunk-ZOBZU47M.js +2 -0
  49. package/dist/chunk-ZOBZU47M.js.map +1 -0
  50. package/dist/core-handler-XAVVKLhV.d.ts +37 -0
  51. package/dist/datetime-XX4YBITU.js +2 -0
  52. package/dist/{datetime-GOUY7ZJZ.js.map → datetime-XX4YBITU.js.map} +1 -1
  53. package/dist/editor-ZLTDOUPT.js +2 -0
  54. package/dist/{editor-IK2CNBJV.js.map → editor-ZLTDOUPT.js.map} +1 -1
  55. package/dist/index.css +1007 -917
  56. package/dist/index.d.ts +64 -9
  57. package/dist/index.js +347 -14
  58. package/dist/index.js.map +1 -1
  59. package/dist/logo-LB22KTDD.js +3 -0
  60. package/dist/{logo-4JW3ZQGP.js.map → logo-LB22KTDD.js.map} +1 -1
  61. package/dist/{ssr.d.ts → nextjs.d.ts} +2 -15
  62. package/dist/nextjs.js +71 -0
  63. package/dist/project-selector-4G4WL2XQ.js +2 -0
  64. package/dist/{project-selector-6UNKDUFP.js.map → project-selector-4G4WL2XQ.js.map} +1 -1
  65. package/dist/search-CKPEOD77.js +2 -0
  66. package/dist/{search-XZ52MCGA.js.map → search-CKPEOD77.js.map} +1 -1
  67. package/dist/switch-FU7XZ34K.js +2 -0
  68. package/dist/{switch-GWTYDHPW.js.map → switch-FU7XZ34K.js.map} +1 -1
  69. package/dist/tanstack-start.d.ts +99 -0
  70. package/dist/tanstack-start.js +147 -0
  71. package/dist/text-DFG6LLN6.js +2 -0
  72. package/dist/{text-OSJFNY7L.js.map → text-DFG6LLN6.js.map} +1 -1
  73. package/dist/text-LNFBPXBT.js +2 -0
  74. package/dist/{text-Y2ITNUWV.js.map → text-LNFBPXBT.js.map} +1 -1
  75. package/dist/textarea-XFHA5IEI.js +2 -0
  76. package/dist/{textarea-J6THGASV.js.map → textarea-XFHA5IEI.js.map} +1 -1
  77. package/dist/{types-RVyP_Twi.d.ts → types.d-CH6seXQw.d.ts} +108 -1
  78. package/dist/ui.d.ts +10 -11
  79. package/dist/ui.js +1 -1
  80. package/dist/ui.js.map +1 -1
  81. package/dist/user-nav-5LW5USDZ.js +2 -0
  82. package/dist/{user-nav-MAMF3XX5.js.map → user-nav-5LW5USDZ.js.map} +1 -1
  83. package/package.json +39 -16
  84. package/dist/asset-F2SF5UHA.js +0 -2
  85. package/dist/boolean-IUJXXA2D.js +0 -2
  86. package/dist/chunk-2DBX42KN.js +0 -2
  87. package/dist/chunk-2DBX42KN.js.map +0 -1
  88. package/dist/chunk-7ZFZY5R4.js +0 -2
  89. package/dist/chunk-A6DNMUGW.js +0 -2
  90. package/dist/chunk-EQ3526ET.js +0 -2
  91. package/dist/chunk-EQ3526ET.js.map +0 -1
  92. package/dist/chunk-G3L524HS.js +0 -2
  93. package/dist/chunk-GHV46F5V.js +0 -2
  94. package/dist/chunk-GXUHAW3R.js +0 -2
  95. package/dist/chunk-GXUHAW3R.js.map +0 -1
  96. package/dist/chunk-JB2CLKHS.js +0 -2
  97. package/dist/chunk-JB2CLKHS.js.map +0 -1
  98. package/dist/chunk-JNAHBJHF.js +0 -2
  99. package/dist/chunk-JNAHBJHF.js.map +0 -1
  100. package/dist/chunk-LEEJFMT6.js +0 -2
  101. package/dist/chunk-LEEJFMT6.js.map +0 -1
  102. package/dist/chunk-NM3JPB46.js +0 -2
  103. package/dist/chunk-NM3JPB46.js.map +0 -1
  104. package/dist/chunk-OBDHNFM5.js +0 -2
  105. package/dist/chunk-OBDHNFM5.js.map +0 -1
  106. package/dist/chunk-OBWXS7PQ.js +0 -2
  107. package/dist/chunk-OJCXEL7M.js +0 -2
  108. package/dist/chunk-OJCXEL7M.js.map +0 -1
  109. package/dist/chunk-OTLHY3ST.js +0 -2
  110. package/dist/chunk-OTLHY3ST.js.map +0 -1
  111. package/dist/chunk-OV2SJGU3.js +0 -2
  112. package/dist/chunk-PAAKWKLA.js +0 -2
  113. package/dist/chunk-RUXKF224.js +0 -2
  114. package/dist/chunk-RUXKF224.js.map +0 -1
  115. package/dist/chunk-SHVY2WXV.js +0 -3
  116. package/dist/chunk-SHVY2WXV.js.map +0 -1
  117. package/dist/chunk-TKD36DLT.js +0 -2
  118. package/dist/chunk-TKD36DLT.js.map +0 -1
  119. package/dist/chunk-UTZ7XOUK.js +0 -2
  120. package/dist/chunk-UZTABGUM.js +0 -334
  121. package/dist/chunk-UZTABGUM.js.map +0 -1
  122. package/dist/chunk-VVAW7U22.js +0 -2
  123. package/dist/chunk-VVAW7U22.js.map +0 -1
  124. package/dist/chunk-W632YC7D.js +0 -2
  125. package/dist/chunk-W632YC7D.js.map +0 -1
  126. package/dist/chunk-WEMBNSFH.js +0 -2
  127. package/dist/chunk-Z37UM6ED.js +0 -2
  128. package/dist/chunk-ZUOOAEAL.js +0 -2
  129. package/dist/chunk-ZUOOAEAL.js.map +0 -1
  130. package/dist/data-grid/index.d.ts +0 -59
  131. package/dist/data-grid/index.js +0 -4
  132. package/dist/data-grid/index.js.map +0 -1
  133. package/dist/datetime-GOUY7ZJZ.js +0 -2
  134. package/dist/editor-IK2CNBJV.js +0 -2
  135. package/dist/logo-4JW3ZQGP.js +0 -3
  136. package/dist/project-selector-6UNKDUFP.js +0 -2
  137. package/dist/search-XZ52MCGA.js +0 -2
  138. package/dist/ssr.js +0 -3
  139. package/dist/ssr.js.map +0 -1
  140. package/dist/switch-GWTYDHPW.js +0 -2
  141. package/dist/text-OSJFNY7L.js +0 -2
  142. package/dist/text-Y2ITNUWV.js +0 -2
  143. package/dist/textarea-J6THGASV.js +0 -2
  144. package/dist/types.d-DEo8bqfV.d.ts +0 -110
  145. package/dist/user-nav-MAMF3XX5.js +0 -2
@@ -1,334 +0,0 @@
1
- import {a as a$6}from'./chunk-OTLHY3ST.js';import {a as a$1}from'./chunk-GHV46F5V.js';import {a as a$2}from'./chunk-2DBX42KN.js';import {a}from'./chunk-WEMBNSFH.js';import {b}from'./chunk-OBDHNFM5.js';import {a as a$3}from'./chunk-OBWXS7PQ.js';import {a as a$5,b as b$1,e as e$1,f,c,g}from'./chunk-OJCXEL7M.js';import {e,h,f as f$1}from'./chunk-NM3JPB46.js';import {b as b$2}from'./chunk-LEEJFMT6.js';import {a as a$4}from'./chunk-A6DNMUGW.js';import {createContext,useReducer,useContext,useState,useEffect,useRef}from'react';import {filter,propEq,find,omit,pick,toPairs,uniqBy,props}from'ramda';import {jsx,jsxs}from'react/jsx-runtime';import {v4}from'uuid';import {gql}from'@apollo/client';import {useApolloClient,useMutation}from'@apollo/client/react';import {ServerError}from'@apollo/client/errors';import {useReactTable,getFacetedUniqueValues,getFacetedRowModel,getSortedRowModel,getPaginationRowModel,getFilteredRowModel,getCoreRowModel,flexRender}from'@tanstack/react-table';import {useVirtualizer}from'@tanstack/react-virtual';var pt=createContext([]),mt=createContext(()=>{});function Tt(t,e){let i=e.type;switch(e._id||(e._id=Date.now().toString()),i){case "DeleteEntity":return uniqBy(props(["type","_id"]),[...t,e]);case "AddEntity":return uniqBy(props(["type","_id"]),[...t,e]);case "EditEntity":return uniqBy(props(["type","_id"]),[...t,e]);case "EditRelationship":return uniqBy(props(["type","_id"]),[...t,e]);case "AlertDialog":return uniqBy(props(["type","_id"]),[...t,e]);case "Dismiss":return t.filter(r=>r._id!==e._id);default:throw Error(`Unknown action: ${i}`)}}function Nt({children:t}){let[e,i]=useReducer(Tt,[]);return jsx(pt.Provider,{value:e,children:jsx(mt.Provider,{value:i,children:t})})}function te(){return useContext(pt)}function ee(){return useContext(mt)}var Dt=["id","string"],kt=["date","datetime","duration","time"];function le(t,e,i){let r="(where: $where, options: $options)",u=M(i,t),s=u?.name??t,a=u?.attributes??[],p=`$where: ${s}Where, $options: ${s}Options`;if(!u)throw new Error(`Entity '${s}' not found in the schema`);if(a.length===0)throw new Error(`Entity '${s}' has no attributes defined in the schema`);let c=C("global",a).join(`
2
- `),o=O(a),n=C(["local"],a),d=n.reduce((l,E)=>`${l}
3
- ${E} {
4
- _id
5
- default
6
- }
7
- `,""),m=n.reduce((l,E)=>`${l}
8
- ${E} {
9
- _id
10
- default
11
- ${e}
12
- }
13
- `,""),h=e==="default"?d:m,b=o.reduce((l,E)=>`${l}
14
- ${E} {
15
- _id
16
- originalFilename
17
- mimeType
18
- path
19
- size
20
- height
21
- width
22
- lqip
23
- }
24
- `,""),g=filter(propEq("relationship","scope"))(a).reduce((l,E)=>{let D=find(propEq(E.relationship?.entity,"name"))(i)?.attributes.reduce(($,f)=>{let A=e==="default"?"":`${e}
25
- `;if(f.dataType==="asset")return `${$}
26
- ${f.name} {
27
- _id
28
- originalFilename
29
- mimeType
30
- path
31
- size
32
- height
33
- width
34
- lqip
35
- }
36
- `;if(f.scope==="local")return `${$}
37
- ${f.name} {
38
- _id
39
- default
40
- ${A}
41
- }
42
- `;if(f.scope==="relationship"){let S=find(propEq(f.relationship?.entity,"name"))(i),I=find(propEq(f.relationship?.field,"name"))(S?.attributes??[]).scope==="local"?`{
43
- _id
44
- default
45
- ${A}}
46
- `:"";if(f.relationship?.mode==="single")return `${$}
47
- ${f.name} {
48
- ${f.relationship.field} ${I}}
49
- `;if(f.relationship?.field)return `${$}
50
- ${f.name} (options: {limit: 25, offset: 0}) {
51
- ${f.relationship.field} ${I}}
52
- `}return `${$}
53
- ${f.name}
54
- `},"");return `${E.name}Aggregate {
55
- count
56
- }${l}
57
- ${E.name} (options: {limit: 25, offset: 0}) { _id ${D??""}}
58
- `},"");return {queryEntityName:t,query:`query getEntity(${p}) {
59
- ${t}Aggregate {
60
- count
61
- }
62
- ${t}${r} {
63
- _id
64
- ${c} ${h} ${b} ${g}}
65
- }
66
- `}}function ue(t,e,i,r){let s=M(r,t)?.attributes??[];if(s.length===0)return {count:0,results:[]};let{count:a}=i[`${t}Aggregate`],p=i[t],c=(n,d)=>{let m=d.name;return n.slice(0,3).map(h=>d.scope==="local"?h[m]?.[e]??h[m].default:h[m]).join(", ")},o=p.map(n=>{let{_id:d}=n,m=C("global",s).reduce((g,l)=>({...g,[l]:n[l]}),{}),h=C("local",s).reduce((g,l)=>{let E=n[l];return {...g,[l]:E?.[e]?E[e]:E?.default}},{}),b=O(s).reduce((g,l)=>({...g,[l]:n[l]}),{}),y=C(["relationship"],s).reduce((g,l)=>{let R=find(propEq(l,"name"))(s).relationship?.entity??"",D=find(propEq(R,"name"))(r),$=Pt(D?.attributes??[]),f=$?.name??"",A=$?.scope??"global",S=n[l];if(!f)throw new Error(`There is an error in the schema for the relationship attribute "${l}"`);if(Array.isArray(S))return {...g,[l]:c(S,$)};let k=A==="global"?S?.[f]:S?.[f]?.[e]??S?.[f]?.default;return {...g,[l]:k}},{});return {_id:d,...m,...h,...b,...y}});return {count:a,results:o}}function ce(t,e,i,r){let s=M(r,t)?.attributes??[];if(s.length===0)return {count:0,results:[]};let{count:a}=i[`${t}Aggregate`],c=i[t].map(o=>{let n=C("global",s).reduce((b,y)=>({...b,[y]:{value:o[y],disabled:false,scope:"default",_id:""}}),{}),d=C("local",s).reduce((b,y)=>{let g=find(propEq(y,"name"))(s),l=o[y];return {...b,[y]:{value:l?_t(l,e):null,disabled:!!(l&&l[e]===null&&g.scope==="local"&&e!=="default"),scope:e,_id:l?l._id:null}}},{}),m=O(s).reduce((b,y)=>({...b,[y]:{value:o[y],disabled:false,scope:"default",_id:""}}),{}),h=C(["relationship"],s).reduce((b,y)=>{let g=o[y],l=g?._id,E=o[`${y}Aggregate`].count;return {...b,[y]:{count:E,_id:l,value:g,disabled:false,scope:e}}},{});return {...n,...d,...m,...h}});return {count:a,results:c}}function _t(t,e){return Array.isArray(t)?t.reduce((i,r)=>{if(r[e]??r.default){let u={_id:r._id,disabled:r.scope===null&&e!=="default",scope:e,value:r[e]??r.default};i.push(u);}return i},[]):t[e]??t.default??null}function de(t,e,i,r,u,s){let a=M(r,t),p=a?.name??t,c=a?.attributes??[],o=U(t);if(c.length===0)return "";let n=X(c,s),d=Y(c,n),m=xt(e,c,n,i),h=vt(e,c,n),b=Ft(c,u,n),y=t,g=K(r,t,i);return `mutation updateEntity($where: ${p}Where) {
67
- update${o}(
68
- where: $where
69
- update: {${d}${m}${h}${b}
70
- }
71
- ) {
72
- ${y} {
73
- _id
74
- ${g} }
75
- }
76
- }
77
- `}function X(t,e){let i=t.map(u=>u.isEditable===false?u.name:"").filter(Boolean),r=omit(i,e);return pick(t.map(u=>u.name),r)}function C(t,e){return Array.isArray(t)?t.reduce((r,u)=>r.concat(C(u,e)),[]):e.filter(r=>r.scope===t&&r.inputType!=="asset").map(r=>r.name)}function O(t){return filter(propEq("asset","dataType"))(t).map(i=>i.name)}function Y(t,e){let i=pick(C("global",t),e);return toPairs(i).reduce((u,[s,a])=>{let p=find(propEq(s,"name"))(t),c=G(p.dataType,a?.value??null);return `${u}
78
- ${s}: ${c}`},"")}function vt(t,e,i){let r=pick(O(e),i);return toPairs(r).reduce((a,[p,c])=>{let o=c.value,n=o?.path?`"${o.path}"`:"null",d=o?.size?o.size:"null",m=o?.mimeType?`"${o.mimeType}"`:"null",h=o?.originalFilename?`"${o.originalFilename}"`:"null",b=o?.height?o.height:"null",y=o?.width?o.width:"null",g=o?.lqip?`"${o.lqip}"`:"null";return n?c.value?._id?`${a}
79
- ${p}: {
80
- update: {
81
- node: {
82
- mimeType: ${m}
83
- originalFilename: ${h}
84
- path: ${n}
85
- size: ${d}
86
- height: ${b}
87
- width: ${y}
88
- lqip: ${g}
89
- }
90
- }
91
- }`:`${a}
92
- ${p}: {
93
- create: {
94
- node: {
95
- _id: "${t}:${p}"
96
- mimeType: ${m}
97
- originalFilename: ${h}
98
- path: ${n}
99
- size: ${d}
100
- height: ${b}
101
- width: ${y}
102
- lqip: ${g}
103
- }
104
- }
105
- }`:a},"")}function xt(t,e,i,r){let u=pick(C("local",e),i);return toPairs(u).reduce((p,[c,o])=>{let n=find(propEq(c,"name"))(e),{dataType:d}=n,m=o.disabled||Array.isArray(o.value)?"null":G(d,o.value);return o._id?`${p}
106
- ${c}: {
107
- update: {
108
- node: {
109
- ${r}: ${m}
110
- }
111
- }
112
- }`:m?`${p}
113
- ${c}: {
114
- create: {
115
- node: {
116
- _id: "${t}:${c}"
117
- _type: "${d}"
118
- ${r}: ${m}
119
- }
120
- }
121
- }`:p},"")}function Ft(t,e,i){let r=pick(C("relationship",t),i);return toPairs(r).reduce((a,[p,c])=>{let o=find(propEq(p,"name"))(t),{inputType:n,relationship:d}=o;if(n==="relationship"&&d?.mode==="single"){let m=`disconnect: {
122
- where: {
123
- node: {
124
- _id: "${e[p]._id??""}"
125
- }
126
- }
127
- }
128
- `,h=`connect: {
129
- where: {
130
- node: {
131
- _id: "${c._id??""}"
132
- }
133
- }
134
- }
135
- `;return `${a}
136
- ${p}: {
137
- ${h} ${m} }`}if(n==="relationship"&&d?.mode==="multiple"){let m=c.relationships?.disconnect?.reduce((l,E)=>`${l} {
138
- node: {
139
- _id: "${E}"
140
- }
141
- }
142
- `,""),b=(c.relationships?.connect??[]).reduce((l,E)=>`${l} {
143
- _id: "${E._id}"
144
- }
145
- `,""),y=m?`disconnect: {
146
- where: {
147
- OR: [
148
- ${m} ]
149
- }
150
- }
151
- `:"",g=b?`connect: {
152
- where: {
153
- node: {
154
- OR: [
155
- ${b} ]
156
- }
157
- }
158
- }
159
- `:"";return `${a}
160
- ${p}: {
161
- ${y} ${g} }`}return `${a}
162
- `},"")}function G(t,e){return kt.includes(t)?e?.toString().replace(/"/g,'\\"')?`"${e?.toString().replace(/"/g,'\\"')}"`:null:Dt.includes(t)?`"${e?.toString().replace(/"/g,'\\"')??"null"}"`:e?.toString()??null}function K(t,e,i){let u=M(t,e)?.attributes??[],s=C("global",u),a=C("local",u),p=C("relationship",u),c=s.reduce((o,n)=>`${o}${n}
163
- `,"");return c+=a.reduce((o,n)=>`${o} ${n} {
164
- _id
165
- ${i}
166
- }
167
- `,""),c+=p.reduce((o,n)=>{let d=find(propEq(n,"name"))(u),m=d?.relationship?.mode??"single",h=d?.relationship?.entity??"",y=find(propEq(h,"name"))(t)?.attributes??[],g=d?.relationship?.field??"[invalid_relationship_field_name_in_schema]",E=find(propEq(g,"name"))(y).scope,R="";if(m==="single"&&(E==="global"&&(R=` ${n} {
168
- _id
169
- ${g}
170
- }
171
- `),E==="local"&&(R=` ${n} {
172
- _id
173
- ${g} {
174
- _id
175
- default
176
- ${i}
177
- }
178
- }
179
- `)),m==="multiple"&&y.length){let D=y.reduce(($,f)=>{if(f.scope==="local")return `${$} ${f.name} {
180
- _id
181
- default
182
- ${i}
183
- }
184
- `;if(f.scope==="relationship"){let A=i==="default"?"":`${i}
185
- `,S=find(propEq(f.relationship?.entity,"name"))(t),I=find(propEq(f.relationship?.field,"name"))(S?.attributes??[]).scope==="local"?`{
186
- _id
187
- default
188
- ${A}}
189
- `:"";if(f.relationship?.mode==="single")return `${$} ${f.name} {
190
- ${f.relationship.field} ${I}}
191
- `;if(f.relationship?.field)return `${$} ${f.name} (options: {limit: 25, offset: 0}) {
192
- ${f.relationship.field} ${I}}
193
- `}return f.inputType==="asset"?`${$} ${f.name} {
194
- _id
195
- originalFilename
196
- mimeType
197
- path
198
- size
199
- height
200
- width
201
- lqip
202
- }
203
- `:`${$} ${f.name}
204
- `},"");R=` ${n}Aggregate {
205
- count
206
- }
207
- ${n} (options: {limit: 25, offset: 0}) {
208
- ${D} }
209
- `;}return `${o}${R}`},""),c}function pe(t,e,i){let r=find(propEq(t,"name"))(e),u=r?.attributes??[],s=U(r?.plural??""),a=Vt(u,i);return t==="_asset"?`mutation deleteEntity($where: ${t}Where) {
210
- delete_assets(
211
- where: $where
212
- ) {
213
- nodesDeleted
214
- relationshipsDeleted
215
- }
216
- }
217
- `:`mutation deleteEntity($where: ${t}Where) {
218
- delete${s}(
219
- where: $where
220
- ${a?` delete: {
221
- ${a}
222
- }
223
- `:""} ) {
224
- nodesDeleted
225
- relationshipsDeleted
226
- }
227
- }
228
- `}function Vt(t,e){return C("local",t).reduce((u,s)=>`${u}
229
- ${s}: {
230
- where: {
231
- node: {
232
- _id: "${e}:${s}"
233
- }
234
- }
235
- }`,"")}function me(t,e,i,r){let u=M(e,t),s=u?.attributes??[],a=U(u?.plural??"");if(s.length===0)return "";let p=X(s,i),c=Y(s,p),o=Mt(s,p,"default",r),n=It(s,p),d=t,m=K(e,d,"default");return `mutation {
236
- create${a}(
237
- input: [{
238
- _id: "${r}" ${c} ${o}
239
- ${n}
240
- }]
241
- ) {
242
- ${d} {
243
- ${m} }
244
- }
245
- }
246
- `}function Mt(t,e,i,r){let u=pick(C("local",t),e);return toPairs(u).reduce((p,[c,o])=>{if(!o?.value)return p;let n=find(propEq(c,"name"))(t),d=Array.isArray(o.value)?"null":G(n.dataType,o.value);return `${p}
247
- ${c}: {
248
- create: {
249
- node: {
250
- _id: "${r}:${c}"
251
- _type: "${n.dataType}"
252
- ${i}: ${d}
253
- }
254
- }
255
- }`},"")}function It(t,e){let i=pick(C("relationship",t),e);return toPairs(i).reduce((s,[a,p])=>{let c=find(propEq(a,"name"))(t),{inputType:o,relationship:n}=c;if(o==="relationship"&&n?.mode==="single"){let h=`connect: {
256
- where: {
257
- node: {
258
- _id: "${p._id??""}"
259
- }
260
- }
261
- }
262
- `;return `${s}
263
- ${a}: {
264
- ${h} }`}let d=o==="relationship"&&n?.mode==="multiple",m=Array.isArray(p.relationships?.connect)&&p.relationships.connect.length>0;if(d&&m){let b=(p.relationships?.connect??[]).reduce((g,l)=>`${g} {
265
- _id: "${l._id}"
266
- }
267
- `,""),y=b?`connect: {
268
- where: {
269
- node: {
270
- OR: [
271
- ${b} ]
272
- }
273
- }
274
- }
275
- `:"";return `${s}
276
- ${a}: {
277
- ${y} }`}return `${s}
278
- `},"")}function Pt(t){return t.find(e=>e.isPrimary)??t[0]}function ge({attributeName:t,relatedEntityName:e,scope:i,schema:r}){let u="(where: $where, options: $options)",s=find(propEq(e,"name"))(r),a=s?.attributes??[],p=`$where: ${e}Where, $options: ${e}Options`,c=s?.plural??"";if(a.length===0)return {queryEntityName:"",query:""};let o=C("global",a).join(`
279
- `),n=C(["local"],a),d=n.reduce((g,l)=>`${g}
280
- ${l} {
281
- _id
282
- default
283
- }
284
- `,""),m=n.reduce((g,l)=>`${g}
285
- ${l} {
286
- _id
287
- default
288
- ${i}
289
- }
290
- `,""),h=i==="default"?d:m,y=filter(propEq("relationship","scope"))(a).reduce((g,l)=>{let R=find(propEq(l.relationship?.entity,"name"))(r)?.attributes.reduce((D,$)=>{let f=i==="default"?"":`${i}
291
- `;if($.scope==="local")return `${D}
292
- ${$.name} {
293
- _id
294
- default
295
- ${f}}
296
- `;if($.scope==="relationship"){let A=find(propEq($.relationship?.entity,"name"))(r),k=find(propEq($.relationship?.field,"name"))(A?.attributes??[]).scope==="local"?`{
297
- _id
298
- default
299
- ${f}}
300
- `:"";if($.relationship?.mode==="single")return `${D}
301
- ${$.name} {
302
- ${$.relationship.field} ${k}}
303
- `;if($.relationship?.field)return `${D}
304
- ${$.name} (options: {limit: 25, offset: 0}) {
305
- ${$.relationship.field} ${k}}
306
- `}return `${D}
307
- ${$.name}
308
- `},"");return `${g}
309
- ${l.name} (options: {limit: 25, offset: 0}) { _id ${R??""}}
310
- `},"");return {queryEntityName:c,query:`query getEntity(${p}) {
311
- ${t}Aggregate(where: $where) {
312
- count
313
- }
314
- ${c}${u} {
315
- _id
316
- ${o} ${h} ${y} }
317
- }
318
- `}}function gt(t){let e$1=e.attributes,i=U(e.plural),r=v4(),u=X(e$1,t),s=Y(e$1,u),a=e.plural,p=K([e,f$1],a,"default");return `mutation {
319
- create${i}(
320
- input: [{
321
- _id: "${r}" ${s} }]
322
- ) {
323
- ${a} {
324
- ${p} }
325
- }
326
- }
327
- `}var U=t=>t.charAt(0).toUpperCase()+t.slice(1);function M(t,e$1){return e$1==="_assets"?e:find(propEq(e$1,"plural"))(t)}function zt(t){return t?"cause"in t:false}function yt(t){if(!t)return null;if(ServerError.is(t))return t;if(zt(t)){let e=t.cause;if(ServerError.is(e))return e}return null}function ht(t){if(!t)return null;try{return JSON.parse(t)}catch{return null}}function we(){let t=useApolloClient();return async e=>{let i=gt(e);await t.mutate({mutation:gql`
328
- ${i}
329
- `});}}function Te(){let[t,e]=useState(false),[i,r]=useState(gql`
330
- mutation updateEntity($any: Any) {
331
- any
332
- }
333
- `),[u,s]=useState({}),[a,{data:p,loading:c,error:o}]=useMutation(i,u),n=yt(o),{isProjectDisabled:d,isProjectReadOnly:m}=(()=>{if(n?.statusCode===403){let h=ht(n.bodyText);if(h&&typeof h.code=="string"){if(h.code==="PROJECT_PAUSED")return {isProjectDisabled:true,isProjectReadOnly:false};if(h.code==="READ_ONLY_MODE")return {isProjectDisabled:false,isProjectReadOnly:true}}return {isProjectDisabled:true,isProjectReadOnly:false}}return {isProjectDisabled:false,isProjectReadOnly:false}})();return useEffect(()=>{t&&(a(),e(false));},[t,a]),[e,r,s,{data:p,loading:c,error:o,isProjectDisabled:d,isProjectReadOnly:m}]}function At({value:t}){return !t||!t.split(",").length?null:jsx("div",{className:"fk-flex fk-flex-wrap fk-gap-1 fk-max-w-full truncate",children:t.split(",").map(e=>jsx(b$2,{className:"fk-px-2.5 fk-py-0 fk-font-normal fk-text-[0.6875rem] fk-leading-4",variant:"secondary",children:e},e))})}function ze({attributesSchema:t,checkboxSelect:e,actionsComponent:i}){let{getContributionPointConfig:r}=h(),u={datetime:"datetime",editor:"editor",asset:"asset",number:"text",relationship:"text",select:"text",switch:"boolean",text:"text",textarea:"text"},s={boolean:a$1,date:a,datetime:a$3,editor:b,asset:a$2,number:a,relationship:a,select:a,switch:a$1,text:a,textarea:a,tags:At},a$4=t.map(n=>{let d=n.previewType??u[n.inputType],m=r("previewFields",[d])?.[0]?.component??s[d]??s.text;if(n.isHidden)return null;let h=d==="tags";return {accessorKey:n.name,filterFn:(b,y,g)=>h?true:(Array.isArray(g)?g:[g]).includes(b.getValue(y)),header:()=>jsx("div",{className:"fk-flex fk-items-center",children:n.label}),cell:({row:b})=>jsx(m,{value:b.getValue(n.name)}),enableSorting:false,enableHiding:true,size:n.options?.size??150}}).filter(n=>n!==null),p={id:"actions",cell:({row:n})=>i?i(n):null,size:80},c={id:"select",cell:({row:n,table:d})=>jsx(a$6,{"aria-label":"Select row",checked:n.getIsSelected(),onCheckedChange:m=>{d.toggleAllPageRowsSelected(false),n.toggleSelected(!!m);}}),enableSorting:false,enableHiding:false,size:50},o={id:"select",header:({table:n})=>jsx(a$6,{"aria-label":"Select all",checked:n.getIsAllPageRowsSelected()||n.getIsSomePageRowsSelected()&&"indeterminate",onCheckedChange:d=>{n.toggleAllPageRowsSelected(!!d);}}),cell:({row:n})=>jsx(a$6,{"aria-label":"Select row",checked:n.getIsSelected(),onCheckedChange:d=>{n.toggleSelected(!!d);}}),enableSorting:false,enableHiding:false,size:50};return [...e==="single"?[c]:[],...e==="multiple"?[o]:[],...i?[p]:[],...a$4]}function He({classNames:t,columns:e,data:i,initialSelectionState:r,onEntitySelectionChange:u,onScroll:s,pageSize:a,rowAdditionState:p,rowDeletionState:c$1,toolbarComponent:o}){let n=useRef(null),[d,m]=useState(r??{}),[h,b]=useState({}),[y,g$1]=useState([]),[l,E]=useState([]),R=useReactTable({data:i,columns:e,state:{sorting:l,columnVisibility:h,rowSelection:d,columnFilters:y},initialState:{pagination:{pageSize:a??25}},enableRowSelection:true,onRowSelectionChange:f$1,onSortingChange:E,onColumnFiltersChange:g$1,onColumnVisibilityChange:b,getCoreRowModel:getCoreRowModel(),getFilteredRowModel:getFilteredRowModel(),getPaginationRowModel:getPaginationRowModel(),getSortedRowModel:getSortedRowModel(),getFacetedRowModel:getFacetedRowModel(),getFacetedUniqueValues:getFacetedUniqueValues(),getRowId:A=>A._id,manualPagination:true,meta:{getRowBackground:A=>Gt(A,c$1,p)}}),{rows:D}=R.getRowModel(),$=useVirtualizer({count:D.length,estimateSize:()=>45,getScrollElement:()=>n.current,measureElement:typeof window<"u"&&navigator.userAgent.includes("Firefox")?A=>A.getBoundingClientRect().height:void 0,overscan:5});function f$1(A){let S=Object.keys(typeof A=="function"?A(d):A);m(A),u?.(S);}return jsxs("div",{className:a$4("fk-w-full fk-h-full fk-space-y-4",t?.wrapper),children:[o&&o(R),jsxs(a$5,{className:a$4("fk-grid fk-pb-[5rem]",t?.table),onScroll:s,ref:n,children:[jsx(b$1,{className:"fk-grid",children:R.getHeaderGroups().map(A=>jsx(e$1,{className:"fk-flex fk-w-full",children:A.headers.map(S=>jsx(f,{className:a$4("fk-flex fk-items-center",S.column.id==="actions"&&"fk-pl-0"),colSpan:S.colSpan,style:S.getSize()?{width:`${S.getSize().toString()}px`}:{},children:S.isPlaceholder?null:flexRender(S.column.columnDef.header,S.getContext())},S.id))},A.id))}),jsx(c,{className:"fk-grid fk-relative",style:{height:`${$.getTotalSize().toString()}px`},children:$.getVirtualItems().length?$.getVirtualItems().map(A=>{let S=D[A.index];return jsx(e$1,{className:`${R.options.meta.getRowBackground(S)} fk-flex fk-absolute fk-w-full ${t?.row??""}`,"data-index":A.index,"data-state":S.getIsSelected()&&"selected",ref:$.measureElement,style:{transform:`translateY(${A.start.toString()}px)`},children:S.getVisibleCells().map(k=>jsx(g,{className:a$4("fk-flex fk-items-center fk-truncate",k.column.id==="actions"&&"!fk-pl-0"),style:{width:k.column.getSize()},children:flexRender(k.column.columnDef.cell,k.getContext())},k.id))},A.key)}):jsx(e$1,{children:jsx(g,{className:"fk-h-24 fk-text-center",colSpan:e.length,children:"No results."})})})]})]})}function Gt(t,e,i){return e?.includes(t.original._id)?"fk-bg-row-removed hover:fk-bg-row-removed-hover":i?.some(r=>r._id===t.original._id)?"fk-bg-row-added hover:fk-bg-row-added-hover":""}export{yt as a,ht as b,Nt as c,te as d,ee as e,le as f,ue as g,ce as h,de as i,pe as j,me as k,ge as l,M as m,we as n,Te as o,ze as p,He as q};//# sourceMappingURL=chunk-UZTABGUM.js.map
334
- //# sourceMappingURL=chunk-UZTABGUM.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/entities/actions-context.tsx","../src/graphql-client/queries.ts","../src/graphql-client/error-utils.ts","../src/graphql-client/use-entity-mutation.ts","../src/data-grid/preview-components/tags.tsx","../src/data-grid/columns.tsx","../src/data-grid/data-table.tsx"],"names":["ActionsContext","createContext","EntityDispatchContext","actionsReducer","actions","action","actionType","uniqBy","props","item","ActionsProvider","children","entityActions","dispatchEntityActions","useReducer","jsx","useActions","useContext","useDispatch","stringTypes","temporalTypes","getEntityQuery","entityNamePlural","scope","schema","filters","entitySchema","getEntitySchema","entityName","attributes","heading","globalAttributesList","getAttributeListByScope","imageAttributes","getImageAttributes","localAttributes","defaultScopedAttr","acc","attribute","scopedAttribute","localAttributesList","imageAttributesList","relationshipAttributesList","filter","propEq","attributesNameList","find","relatedAcc","relatedAttribute","additionalScope","relationshipEntity","localAttributeQuery","mapQueryResult","results","count","items","sliceFirstThreeItems","values","primaryAttribute","primaryAttributeName","mappedQueryResult","entity","_id","globalAttributes","attributeName","relationshipAttributes","relatedEntityName","relatedEntity","getPrimaryAttribute","primaryAttributeScope","localValue","value","mapQueryResultForFormFields","attributeSchema","localAttribute","getValueByScope","aggregateCount","result","attr","option","getEntityUpdateMutation","entityId","originalData","dataToMutate","pluralizedEntityName","capitalize","data","filterOutInvalidAttributes","globalAttributesUpdate","localAttributesUpdate","imageAttributesUpdate","relationshipAttributesUpdate","responseType","attributeNamesList","formatResponseFieldsForMutation","nonUpdatableAttributes","omit","pick","type","attributeType","schemaAttributes","toPairs","typedValue","stringifyValue","attributeValue","imageValue","imagePath","imageSize","imageMimeType","originalFilename","height","width","lqip","dataType","inputType","relationship","disconnect","connect","nodesToDisconnect","disconnectString","nodesToConnect","connectString","node","globalAttributesArray","localAttributesArray","relationshipAttributesArray","fields","relationshipAttribute","relationshipMode","relationshipEntityName","relationshipEntityAttributes","list","multipleRelationshipAttributes","str","getEntityDeleteMutation","localAttributesDelete","getEntityCreateMutation","entityData","localAttributesCreate","relationshipAttributesCreate","defaultScope","isMultipleRelationship","hasRelationships","getRelatedItemsQuery","queryEntityName","getAssetCreateMutation","assetSchema","uuidv4","tagSchema","hasCause","error","getServerError","ServerError","possibleServerError","parseErrorBody","bodyText","useCreateAssetMutation","apolloClient","useApolloClient","mutation","gql","useEntityMutation","runMutation","setRunMutation","useState","setMutation","options","setOptions","mutateFunction","loading","useMutation","serverError","isProjectDisabled","isProjectReadOnly","responseBody","useEffect","Tags","tag","Badge","useGridColumnsDefinition","attributesSchema","checkboxSelect","actionsComponent","getContributionPointConfig","useConfig","inputTypeToPreviewFieldMap","previewFieldComponentsMap","Boolean","Text","DateTime","Editor","Asset","cols","previewType","previewComponent","isTagsPreview","row","id","column","singleCheckboxSelect","table","Checkbox","multipleCheckboxSelect","DataTable","classNames","columns","initialSelectionState","onEntitySelectionChange","onScroll","pageSize","rowAdditionState","rowDeletionState","toolbarComponent","scrollRef","useRef","rowSelection","setRowSelection","columnVisibility","setColumnVisibility","columnFilters","setColumnFilters","sorting","setSorting","useReactTable","handleRowSelectionChange","getCoreRowModel","getFilteredRowModel","getPaginationRowModel","getSortedRowModel","getFacetedRowModel","getFacetedUniqueValues","getRowClassnames","rows","rowVirtualizer","useVirtualizer","element","updaterFn","selectedIds","jsxs","cn","Table","TableHeader","headerGroup","TableRow","header","TableHead","flexRender","TableBody","virtualRow","cell","TableCell","line"],"mappings":"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","file":"chunk-UZTABGUM.js","sourcesContent":["'use client';\n\nimport { createContext, useContext, useReducer } from 'react';\nimport type { Dispatch, ReactNode } from 'react';\nimport { props, uniqBy } from 'ramda';\nimport type {\n Action,\n ActionAddEntity,\n ActionAlertDialog,\n ActionDeleteEntity,\n ActionEditEntity,\n ActionEditRelationship,\n} from './types';\n\nconst ActionsContext = createContext<Action[] | []>([]);\nconst EntityDispatchContext = createContext<Dispatch<Action>>(() => undefined);\n\nfunction actionsReducer(actions: Action[], action: Action): Action[] {\n const actionType = action.type;\n\n if (!action._id) {\n action._id = Date.now().toString();\n }\n\n switch (actionType) {\n case 'DeleteEntity': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionDeleteEntity[]), action]);\n }\n case 'AddEntity': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionAddEntity[]), action]);\n }\n case 'EditEntity': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionEditEntity[]), action]);\n }\n case 'EditRelationship': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionEditRelationship[]), action]);\n }\n case 'AlertDialog': {\n return uniqBy(props(['type' as string, '_id']), [...(actions as ActionAlertDialog[]), action]);\n }\n case 'Dismiss': {\n return actions.filter((item) => item._id !== action._id);\n }\n default: {\n throw Error(`Unknown action: ${actionType as string}`);\n }\n }\n}\n\nfunction ActionsProvider({ children }: { children: ReactNode }): JSX.Element {\n const [entityActions, dispatchEntityActions] = useReducer(actionsReducer, []);\n\n return (\n <ActionsContext.Provider value={entityActions}>\n <EntityDispatchContext.Provider value={dispatchEntityActions}>{children}</EntityDispatchContext.Provider>\n </ActionsContext.Provider>\n );\n}\n\nfunction useActions(): Action[] {\n return useContext(ActionsContext);\n}\n\nfunction useDispatch(): Dispatch<Action> {\n return useContext(EntityDispatchContext);\n}\n\nexport { ActionsProvider, useActions, useDispatch };\n","import { filter, find, pick, propEq, toPairs, omit } from 'ramda';\nimport { v4 as uuidv4 } from 'uuid';\nimport { assetSchema } from '../entities/assets-schema';\nimport { tagSchema } from '../entities/tags-schema';\nimport type { Attribute, Entity, DataType, Schema, ScopeType, MultipleRelationshipConnection } from '../core/types';\nimport type {\n AttributeValue,\n EntityData,\n EntityItem,\n EntityQueryAggregate,\n EntityQueryResults,\n FormEntityItem,\n FormFieldValue,\n MappedEntityItem,\n MappedEntityQueryResults,\n MappedFormEntityQueryResults,\n EntityQueryResult,\n ImageValue,\n} from './types';\n\ntype EntityQuery = {\n queryEntityName: string;\n query: string;\n};\n\nconst stringTypes: DataType[] = ['id', 'string'];\nconst temporalTypes: DataType[] = ['date', 'datetime', 'duration', 'time'];\n\nexport function getEntityQuery(entityNamePlural: string, scope: string, schema: Schema): EntityQuery {\n const filters = `(where: $where, options: $options)`;\n const entitySchema = getEntitySchema(schema, entityNamePlural);\n const entityName = entitySchema?.name ?? entityNamePlural;\n const attributes = entitySchema?.attributes ?? [];\n const heading = `$where: ${entityName}Where, $options: ${entityName}Options`;\n\n if (!entitySchema) {\n throw new Error(`Entity '${entityName}' not found in the schema`);\n }\n\n if (attributes.length === 0) {\n throw new Error(`Entity '${entityName}' has no attributes defined in the schema`);\n }\n\n const globalAttributesList: string = getAttributeListByScope('global', attributes).join('\\n ');\n const imageAttributes: string[] = getImageAttributes(attributes);\n const localAttributes: readonly string[] = getAttributeListByScope(['local'], attributes);\n const defaultScopedAttr = localAttributes.reduce(\n (acc, attribute) => `${acc}\\n ${attribute} {\\n _id\\n default\\n }\\n `,\n ''\n );\n const scopedAttribute = localAttributes.reduce(\n (acc, attribute) => `${acc}\\n ${attribute} {\\n _id\\n default\\n ${scope}\\n }\\n `,\n ''\n );\n const localAttributesList: string = scope === 'default' ? defaultScopedAttr : scopedAttribute;\n const imageAttributesList: string = imageAttributes.reduce((acc, attribute) => {\n return `${acc}\\n ${attribute} {\\n _id\\n originalFilename\\n mimeType\\n path\\n size\\n height\\n width\\n lqip\\n }\\n `;\n }, '');\n\n const relationshipAttributes = filter(propEq('relationship', 'scope'))(attributes);\n const relationshipAttributesList: string = relationshipAttributes.reduce((acc, attribute) => {\n const relatedEntity = find(propEq(attribute.relationship?.entity, 'name'))(schema) as Entity | undefined;\n const attributesNameList = relatedEntity?.attributes.reduce((relatedAcc, relatedAttribute) => {\n const additionalScope = scope === 'default' ? '' : `${scope}\\n `;\n\n if (relatedAttribute.dataType === 'asset') {\n return `${relatedAcc}\\n ${relatedAttribute.name} {\\n _id\\n originalFilename\\n mimeType\\n path\\n size\\n height\\n width\\n lqip\\n }\\n `;\n }\n\n if (relatedAttribute.scope === 'local') {\n return `${relatedAcc}\\n ${relatedAttribute.name} {\\n _id\\n default\\n ${additionalScope}\\n}\\n `;\n }\n\n if (relatedAttribute.scope === 'relationship') {\n const relationshipEntity = find(propEq(relatedAttribute.relationship?.entity, 'name'))(schema) as\n | Entity\n | undefined;\n const relationshipAttribute = find(propEq(relatedAttribute.relationship?.field, 'name'))(\n relationshipEntity?.attributes ?? []\n ) as Attribute;\n const localAttributeQuery =\n relationshipAttribute.scope === 'local'\n ? `{\\n _id\\n default\\n ${additionalScope}}\\n `\n : '';\n\n if (relatedAttribute.relationship?.mode === 'single') {\n return `${relatedAcc}\\n ${relatedAttribute.name} {\\n ${relatedAttribute.relationship.field} ${localAttributeQuery}}\\n `;\n }\n\n if (relatedAttribute.relationship?.field) {\n return `${relatedAcc}\\n ${relatedAttribute.name} (options: {limit: 25, offset: 0}) {\\n ${relatedAttribute.relationship.field} ${localAttributeQuery}}\\n `;\n }\n }\n\n return `${relatedAcc}\\n ${relatedAttribute.name}\\n `;\n }, '');\n\n return (\n `${attribute.name}Aggregate {\\n` +\n ` count\\n` +\n ` }` +\n `${acc}\\n ${attribute.name} (options: {limit: 25, offset: 0}) { _id ${attributesNameList ?? ''}` +\n `}\\n `\n );\n }, '');\n\n return {\n queryEntityName: entityNamePlural,\n query:\n `query getEntity(${heading}) {\\n` +\n ` ${entityNamePlural}Aggregate {\\n` +\n ` count\\n` +\n ` }\\n` +\n ` ${entityNamePlural}${filters} {\\n` +\n ` _id\\n` +\n ` ${globalAttributesList}` +\n ` ${localAttributesList}` +\n ` ${imageAttributesList}` +\n ` ${relationshipAttributesList}` +\n `}\\n` +\n `}\\n`,\n };\n}\n\n/**\n * Map the GraphQl results JSON to a key-value pair array. The values inside the scopedAttributes key are flattened to the first level.\n */\nexport function mapQueryResult(\n entityNamePlural: string,\n scope: string,\n results: EntityQueryResults,\n schema: Schema\n): MappedEntityQueryResults {\n const entitySchema = getEntitySchema(schema, entityNamePlural);\n const attributes = entitySchema?.attributes ?? [];\n\n if (attributes.length === 0) {\n return {\n count: 0,\n results: [],\n };\n }\n\n const { count } = results[`${entityNamePlural}Aggregate`] as EntityQueryAggregate;\n const items = results[entityNamePlural] as EntityQueryResult[];\n const sliceFirstThreeItems = (values: EntityItem[], primaryAttribute: Attribute): string => {\n const primaryAttributeName = primaryAttribute.name;\n\n return values\n .slice(0, 3)\n .map((item) =>\n primaryAttribute.scope === 'local'\n ? (item[primaryAttributeName]?.[scope] ?? item[primaryAttributeName].default)\n : item[primaryAttributeName]\n )\n .join(', ');\n };\n const mappedQueryResult = items.map((entity) => {\n const { _id } = entity;\n const globalAttributes = getAttributeListByScope('global', attributes).reduce(\n (acc, attributeName) => ({ ...acc, [attributeName]: entity[attributeName] }),\n {}\n );\n const localAttributes = getAttributeListByScope('local', attributes).reduce((acc, attributeName) => {\n const scopedAttribute = entity[attributeName] as AttributeValue | null;\n\n return {\n ...acc,\n [attributeName]: scopedAttribute?.[scope] ? scopedAttribute[scope] : scopedAttribute?.default,\n };\n }, {});\n const imageAttributes = getImageAttributes(attributes).reduce(\n (acc, attributeName) => ({ ...acc, [attributeName]: entity[attributeName] }),\n {}\n );\n const relationshipAttributes = getAttributeListByScope(['relationship'], attributes).reduce(\n (acc, attributeName) => {\n const relationshipAttribute = find(propEq(attributeName, 'name'))(attributes) as Attribute;\n const relatedEntityName = relationshipAttribute.relationship?.entity ?? '';\n const relatedEntity = find(propEq(relatedEntityName, 'name'))(schema) as Entity | undefined;\n const primaryAttribute = getPrimaryAttribute(relatedEntity?.attributes ?? []);\n const primaryAttributeName = primaryAttribute?.name ?? '';\n const primaryAttributeScope = primaryAttribute?.scope ?? 'global';\n const localValue = entity[attributeName] as AttributeValue | null;\n\n if (!primaryAttributeName) {\n throw new Error(`There is an error in the schema for the relationship attribute \"${attributeName}\"`);\n }\n\n if (Array.isArray(localValue)) {\n return {\n ...acc,\n [attributeName]: sliceFirstThreeItems(localValue, primaryAttribute),\n };\n }\n\n const value =\n primaryAttributeScope === 'global'\n ? localValue?.[primaryAttributeName]\n : ((localValue?.[primaryAttributeName] as AttributeValue | undefined)?.[scope] ??\n (localValue?.[primaryAttributeName] as AttributeValue | undefined)?.default);\n\n return {\n ...acc,\n [attributeName]: value,\n };\n },\n {}\n );\n\n return { _id, ...globalAttributes, ...localAttributes, ...imageAttributes, ...relationshipAttributes };\n });\n\n return {\n count,\n results: mappedQueryResult,\n };\n}\n\n/**\n * Like mapQueryResult but the local attribute values are returned as an object:\n * \\{_id: string, value: string, disabled: boolean, scope: string\\}.\n */\nexport function mapQueryResultForFormFields(\n entityNamePlural: string,\n scope: string,\n results: EntityQueryResults,\n schema: Schema\n): MappedFormEntityQueryResults {\n const entitySchema = getEntitySchema(schema, entityNamePlural);\n const attributes = entitySchema?.attributes ?? [];\n\n if (attributes.length === 0) {\n return {\n count: 0,\n results: [],\n };\n }\n\n const { count } = results[`${entityNamePlural}Aggregate`] as EntityQueryAggregate;\n const items = results[entityNamePlural] as EntityQueryResult[];\n const mappedQueryResult = items.map((entity) => {\n const globalAttributes = getAttributeListByScope('global', attributes).reduce(\n (acc, attribute) => ({\n ...acc,\n [attribute]: {\n value: entity[attribute],\n disabled: false,\n scope: 'default',\n _id: '',\n },\n }),\n {}\n );\n const localAttributes = getAttributeListByScope('local', attributes).reduce((acc, attributeName) => {\n const attributeSchema = find(propEq(attributeName, 'name'))(attributes) as Attribute;\n const localAttribute = entity[attributeName] as AttributeValue | null;\n\n return {\n ...acc,\n [attributeName]: {\n value: localAttribute ? getValueByScope(localAttribute, scope) : null,\n disabled: Boolean(\n localAttribute && localAttribute[scope] === null && attributeSchema.scope === 'local' && scope !== 'default'\n ),\n scope,\n _id: localAttribute ? localAttribute._id : null,\n },\n };\n }, {});\n const imageAttributes = getImageAttributes(attributes).reduce(\n (acc, attribute) => ({\n ...acc,\n [attribute]: {\n value: entity[attribute],\n disabled: false,\n scope: 'default',\n _id: '',\n },\n }),\n {}\n );\n const relationshipAttributes = getAttributeListByScope(['relationship'], attributes).reduce(\n (acc, attributeName) => {\n const value = entity[attributeName] as AttributeValue | null;\n const _id = value?._id;\n const aggregateCount = (entity[`${attributeName}Aggregate`] as AttributeValue).count;\n\n return {\n ...acc,\n [attributeName]: {\n count: aggregateCount,\n _id,\n value,\n disabled: false,\n scope,\n },\n };\n },\n {}\n );\n\n return { ...globalAttributes, ...localAttributes, ...imageAttributes, ...relationshipAttributes };\n });\n\n return {\n count,\n results: mappedQueryResult,\n };\n}\n\n/**\n * Attribute values can be an object or an array of objects if the attribute is a multi-select.\n */\nfunction getValueByScope(\n attribute: AttributeValue | AttributeValue[],\n scope: string\n): FormFieldValue[] | AttributeValue | string | null {\n if (Array.isArray(attribute)) {\n return attribute.reduce((result: FormFieldValue[], attr: AttributeValue) => {\n if (attr[scope] ?? attr.default) {\n const option = {\n _id: attr._id,\n disabled: Boolean(attr.scope === null && scope !== 'default'),\n scope,\n value: attr[scope] ?? attr.default,\n };\n\n result.push(option);\n }\n\n return result;\n }, []);\n }\n\n return attribute[scope] ?? attribute.default ?? null;\n}\n\n/**\n * Returns a string with the GraphQl query needed to mutate the dataToMutate object for the given entity and scope.\n */\nexport function getEntityUpdateMutation(\n entityNamePlural: string,\n entityId: string,\n scope: string,\n schema: Schema,\n originalData: FormEntityItem,\n dataToMutate: EntityData\n): string {\n const entitySchema = getEntitySchema(schema, entityNamePlural);\n const entityName = entitySchema?.name ?? entityNamePlural;\n const attributes = entitySchema?.attributes ?? [];\n const pluralizedEntityName = capitalize(entityNamePlural);\n\n if (attributes.length === 0) {\n return '';\n }\n\n const data = filterOutInvalidAttributes(attributes, dataToMutate);\n const globalAttributes = globalAttributesUpdate(attributes, data);\n const localAttributes = localAttributesUpdate(entityId, attributes, data, scope);\n const imageAttributes = imageAttributesUpdate(entityId, attributes, data);\n const relationshipAttributes = relationshipAttributesUpdate(attributes, originalData, data);\n const responseType = entityNamePlural;\n const attributeNamesList = formatResponseFieldsForMutation(schema, entityNamePlural, scope);\n\n return (\n `mutation updateEntity($where: ${entityName}Where) {\\n` +\n ` update${pluralizedEntityName}(\\n` +\n ` where: $where\\n` +\n ` update: {${globalAttributes}${localAttributes}${imageAttributes}${relationshipAttributes}\\n }\\n` +\n ` ) {\\n` +\n ` ${responseType} {\\n` +\n ` _id\\n` +\n ` ${attributeNamesList}` +\n ` }\\n` +\n ` }\\n` +\n `}\\n`\n );\n}\n\n/**\n * Filter out any attribute received from the form that does not exist in the schema.\n */\nfunction filterOutInvalidAttributes(attributes: Attribute[], dataToMutate: EntityData): FormEntityItem {\n const nonUpdatableAttributes: readonly string[] = attributes\n .map((attribute) => {\n if (attribute.isEditable === false) {\n return attribute.name;\n }\n\n return '';\n })\n .filter(Boolean);\n const data = omit(nonUpdatableAttributes, dataToMutate);\n\n return pick(\n attributes.map((attribute) => attribute.name) as unknown as readonly [number, ...number[]],\n data\n ) as unknown as FormEntityItem;\n}\n\n/**\n * Filter attributes by scope: local, global or relationship.\n */\nfunction getAttributeListByScope(type: ScopeType | ScopeType[], attributes: Attribute[]): Attribute['name'][] {\n if (Array.isArray(type)) {\n return type.reduce((acc: Attribute['name'][], attributeType: ScopeType) => {\n return acc.concat(getAttributeListByScope(attributeType, attributes));\n }, []);\n }\n\n const filteredAttributes = attributes.filter(\n (attribute) => attribute.scope === type && attribute.inputType !== 'asset'\n );\n\n return filteredAttributes.map((attribute) => attribute.name);\n}\n\n/**\n * Get all attributes that are of type image.\n */\nfunction getImageAttributes(attributes: Attribute[]): Attribute['name'][] {\n const filteredAttributes = filter(propEq('asset', 'dataType'))(attributes);\n\n return filteredAttributes.map((attribute) => attribute.name);\n}\n\nfunction globalAttributesUpdate(schemaAttributes: Attribute[], data: FormEntityItem): string {\n const globalAttributes = pick(getAttributeListByScope('global', schemaAttributes) as [string], data);\n const attributesString = toPairs(globalAttributes).reduce((acc, [attributeName, value]) => {\n const attributeSchema = find(propEq(attributeName, 'name'))(schemaAttributes) as Attribute;\n const typedValue = stringifyValue(attributeSchema.dataType, value?.value ?? null);\n\n return `${acc}\\n ${attributeName}: ${typedValue}`;\n }, '');\n\n return attributesString;\n}\n\nfunction imageAttributesUpdate(entityId: string, schemaAttributes: Attribute[], data: FormEntityItem): string {\n const imageAttributes = pick(getImageAttributes(schemaAttributes) as [string], data);\n const attributesArray: [string, FormFieldValue][] = toPairs(imageAttributes);\n const attributesString: string = attributesArray.reduce((acc, [attributeName, attributeValue]) => {\n const imageValue = attributeValue.value as ImageValue | null;\n const imagePath = imageValue?.path ? `\"${imageValue.path}\"` : 'null';\n const imageSize = imageValue?.size ? imageValue.size : 'null';\n const imageMimeType = imageValue?.mimeType ? `\"${imageValue.mimeType}\"` : 'null';\n const originalFilename = imageValue?.originalFilename ? `\"${imageValue.originalFilename}\"` : 'null';\n const height = imageValue?.height ? imageValue.height : 'null';\n const width = imageValue?.width ? imageValue.width : 'null';\n const lqip = imageValue?.lqip ? `\"${imageValue.lqip}\"` : 'null';\n\n if (!imagePath) {\n return acc;\n }\n\n if ((attributeValue.value as ImageValue)?._id) {\n return (\n `${acc}\\n ${attributeName}: {\\n` +\n ` update: {\\n` +\n ` node: {\\n` +\n ` mimeType: ${imageMimeType}\\n` +\n ` originalFilename: ${originalFilename}\\n` +\n ` path: ${imagePath}\\n` +\n ` size: ${imageSize}\\n` +\n ` height: ${height}\\n` +\n ` width: ${width}\\n` +\n ` lqip: ${lqip}\\n` +\n ` }\\n` +\n ` }\\n` +\n ` }`\n );\n }\n\n return (\n `${acc}\\n ${attributeName}: {\\n` +\n ` create: {\\n` +\n ` node: {\\n` +\n ` _id: \"${entityId}:${attributeName}\"\\n` +\n ` mimeType: ${imageMimeType}\\n` +\n ` originalFilename: ${originalFilename}\\n` +\n ` path: ${imagePath}\\n` +\n ` size: ${imageSize}\\n` +\n ` height: ${height}\\n` +\n ` width: ${width}\\n` +\n ` lqip: ${lqip}\\n` +\n ` }\\n` +\n ` }\\n` +\n ` }`\n );\n }, '');\n\n return attributesString;\n}\n\nfunction localAttributesUpdate(\n entityId: string,\n schemaAttributes: Attribute[],\n data: FormEntityItem,\n scope: string\n): string {\n const localAttributes = pick(getAttributeListByScope('local', schemaAttributes) as [string], data);\n const attributesArray: [string, FormFieldValue][] = toPairs(localAttributes);\n const attributesString: string = attributesArray.reduce((acc, [attributeName, attributeValue]) => {\n const attributeSchema = find(propEq(attributeName, 'name'))(schemaAttributes) as Attribute;\n const { dataType } = attributeSchema;\n const typedValue =\n attributeValue.disabled || Array.isArray(attributeValue.value)\n ? 'null'\n : stringifyValue(dataType, attributeValue.value);\n\n if (attributeValue._id) {\n return `${acc}\\n ${attributeName}: {\\n update: {\\n node: {\\n ${scope}: ${typedValue}\\n }\\n }\\n }`;\n }\n\n if (!typedValue) {\n return acc;\n }\n\n return (\n `${acc}\\n ${attributeName}: {\\n` +\n ` create: {\\n` +\n ` node: {\\n` +\n ` _id: \"${entityId}:${attributeName}\"\\n` +\n ` _type: \"${dataType}\"\\n` +\n ` ${scope}: ${typedValue}\\n` +\n ` }\\n` +\n ` }\\n` +\n ` }`\n );\n }, '');\n\n return attributesString;\n}\n\nfunction relationshipAttributesUpdate(\n schemaAttributes: Attribute[],\n originalData: FormEntityItem,\n data: FormEntityItem\n): string {\n const relationshipAttributes = pick(getAttributeListByScope('relationship', schemaAttributes) as [string], data);\n const attributesArray = toPairs(relationshipAttributes);\n const attributesString: string = attributesArray.reduce((acc, [attributeName, attributeValue]) => {\n const attributeSchema = find(propEq(attributeName, 'name'))(schemaAttributes) as Attribute;\n const { inputType, relationship } = attributeSchema;\n\n if (inputType === 'relationship' && relationship?.mode === 'single') {\n const disconnect = `disconnect: {\\n where: {\\n node: {\\n _id: \"${\n originalData[attributeName]._id ?? ''\n }\"\\n }\\n }\\n }\\n`;\n const connect = `connect: {\\n where: {\\n node: {\\n _id: \"${\n attributeValue._id ?? ''\n }\"\\n }\\n }\\n }\\n`;\n\n return `${acc}\\n ${attributeName}: {\\n ${connect} ${disconnect} }`;\n }\n\n if (inputType === 'relationship' && relationship?.mode === 'multiple') {\n const nodesToDisconnect: string | undefined = attributeValue.relationships?.disconnect?.reduce(\n (disconnectString: string, _id: string) => {\n return `${disconnectString} {\\n node: {\\n _id: \"${_id}\"\\n }\\n }\\n`;\n },\n ''\n );\n const connections = (attributeValue.relationships?.connect as MultipleRelationshipConnection | null) ?? [];\n const nodesToConnect: string | undefined = connections.reduce((connectString: string, node) => {\n return `${connectString} {\\n _id: \"${node._id}\"\\n }\\n`;\n }, '');\n const disconnect = nodesToDisconnect\n ? `disconnect: {\\n where: {\\n OR: [\\n${nodesToDisconnect} ]\\n }\\n }\\n`\n : '';\n const connect = nodesToConnect\n ? `connect: {\\n where: {\\n node: {\\n OR: [\\n${nodesToConnect} ]\\n }\\n }\\n }\\n`\n : '';\n\n return `${acc}\\n ${attributeName}: {\\n ${disconnect} ${connect} }`;\n }\n\n return `${acc}\\n`;\n }, '');\n\n return attributesString;\n}\n\nfunction stringifyValue(\n type: DataType,\n value: string | MappedEntityItem | EntityItem | AttributeValue | ImageValue | null | undefined\n): string | null {\n if (temporalTypes.includes(type)) {\n return value?.toString().replace(/\"/g, '\\\\\"') ? `\"${value?.toString().replace(/\"/g, '\\\\\"')}\"` : null;\n }\n\n return stringTypes.includes(type)\n ? `\"${value?.toString().replace(/\"/g, '\\\\\"') ?? 'null'}\"`\n : (value?.toString() ?? null);\n}\n\nfunction formatResponseFieldsForMutation(schema: Schema, entityNamePlural: string, scope: string): string {\n const entitySchema = getEntitySchema(schema, entityNamePlural);\n const schemaAttributes = entitySchema?.attributes ?? [];\n const globalAttributesArray = getAttributeListByScope('global', schemaAttributes);\n const localAttributesArray = getAttributeListByScope('local', schemaAttributes);\n const relationshipAttributesArray = getAttributeListByScope('relationship', schemaAttributes);\n\n let fields = globalAttributesArray.reduce((acc, attributeName: string) => {\n return `${acc}${attributeName}\\n `;\n }, '');\n\n fields += localAttributesArray.reduce((acc, attributeName: string) => {\n return `${acc} ${attributeName} {\\n _id\\n ${scope}\\n }\\n `;\n }, '');\n\n fields += relationshipAttributesArray.reduce((acc, attributeName: string) => {\n const relationshipAttribute = find(propEq(attributeName, 'name'))(schemaAttributes) as Attribute | undefined;\n const relationshipMode = relationshipAttribute?.relationship?.mode ?? 'single';\n const relationshipEntityName = relationshipAttribute?.relationship?.entity ?? '';\n const relationshipEntitySchema = find(propEq(relationshipEntityName, 'name'))(schema) as Entity | undefined;\n const relationshipEntityAttributes = relationshipEntitySchema?.attributes ?? [];\n const primaryAttributeName =\n relationshipAttribute?.relationship?.field ?? '[invalid_relationship_field_name_in_schema]';\n const primaryAttribute = find(propEq(primaryAttributeName, 'name'))(relationshipEntityAttributes) as Attribute;\n const primaryAttributeScope = primaryAttribute.scope;\n let list = '';\n\n if (relationshipMode === 'single') {\n if (primaryAttributeScope === 'global') {\n list = ` ${attributeName} {\\n _id\\n ${primaryAttributeName}\\n }\\n `;\n }\n\n if (primaryAttributeScope === 'local') {\n list = ` ${attributeName} {\\n _id\\n ${primaryAttributeName} {\\n _id\\n default\\n ${scope}\\n }\\n }\\n `;\n }\n }\n\n if (relationshipMode === 'multiple' && relationshipEntityAttributes.length) {\n const multipleRelationshipAttributes = relationshipEntityAttributes.reduce((str, attribute) => {\n if (attribute.scope === 'local') {\n return `${str} ${attribute.name} {\\n _id\\n default\\n ${scope}\\n }\\n`;\n }\n\n if (attribute.scope === 'relationship') {\n const additionalScope = scope === 'default' ? '' : `${scope}\\n `;\n const relationshipEntity = find(propEq(attribute.relationship?.entity, 'name'))(schema) as Entity | undefined;\n const relationshipAttribute = find(propEq(attribute.relationship?.field, 'name'))(\n relationshipEntity?.attributes ?? []\n ) as Attribute;\n const localAttributeQuery =\n relationshipAttribute.scope === 'local'\n ? `{\\n _id\\n default\\n ${additionalScope}}\\n `\n : '';\n\n if (attribute.relationship?.mode === 'single') {\n return `${str} ${attribute.name} {\\n ${attribute.relationship.field} ${localAttributeQuery}}\\n `;\n }\n\n if (attribute.relationship?.field) {\n return `${str} ${attribute.name} (options: {limit: 25, offset: 0}) {\\n ${attribute.relationship.field} ${localAttributeQuery}}\\n `;\n }\n }\n\n if (attribute.inputType === 'asset') {\n return `${str} ${attribute.name} {\\n _id\\n originalFilename\\n mimeType\\n path\\n size\\n height\\n width\\n lqip\\n }\\n`;\n }\n\n return `${str} ${attribute.name}\\n `;\n }, '');\n\n list =\n ` ${attributeName}Aggregate {\\n` +\n ` count\\n` +\n ` }\\n` +\n ` ${attributeName} (options: {limit: 25, offset: 0}) {\\n${multipleRelationshipAttributes}` +\n ` }\\n`;\n }\n\n return `${acc}${list}`;\n }, '');\n\n return fields;\n}\n\n/**\n * Returns a string with the GraphQl mutation needed to delete an entity.\n */\nexport function getEntityDeleteMutation(entityName: string, schema: Schema, _id: string): string {\n const entitySchema = find(propEq(entityName, 'name'))(schema) as Entity | undefined;\n const attributes = entitySchema?.attributes ?? [];\n const pluralizedEntityName = capitalize(entitySchema?.plural ?? '');\n const localAttributes = localAttributesDelete(attributes, _id);\n\n if (entityName === '_asset') {\n return (\n `mutation deleteEntity($where: ${entityName}Where) {\\n` +\n ` delete_assets(\\n` +\n ` where: $where\\n` +\n ` ) {\\n` +\n ` nodesDeleted\\n` +\n ` relationshipsDeleted\\n` +\n ` }\\n` +\n `}\\n`\n );\n }\n\n return (\n `mutation deleteEntity($where: ${entityName}Where) {\\n` +\n ` delete${pluralizedEntityName}(\\n` +\n ` where: $where\\n` +\n `${localAttributes ? ` delete: {\\n ${localAttributes}\\n }\\n` : ''}` +\n ` ) {\\n` +\n ` nodesDeleted\\n` +\n ` relationshipsDeleted\\n` +\n ` }\\n` +\n `}\\n`\n );\n}\n\nfunction localAttributesDelete(schemaAttributes: Attribute[], _id: string): string {\n const localAttributes = getAttributeListByScope('local', schemaAttributes);\n const attributesString: string = localAttributes.reduce((acc, attributeName) => {\n return (\n `${acc}\\n` +\n ` ${attributeName}: {\\n` +\n ` where: {\\n` +\n ` node: {\\n` +\n ` _id: \"${_id}:${attributeName}\"\\n` +\n ` }\\n` +\n ` }\\n` +\n ` }`\n );\n }, '');\n\n return attributesString;\n}\n\nexport function getEntityCreateMutation(\n entityNamePlural: string,\n schema: Schema,\n entityData: EntityData,\n _id: string\n): string {\n const entitySchema = getEntitySchema(schema, entityNamePlural);\n const attributes = entitySchema?.attributes ?? [];\n const pluralizedEntityName = capitalize(entitySchema?.plural ?? '');\n\n if (attributes.length === 0) {\n return '';\n }\n\n const data = filterOutInvalidAttributes(attributes, entityData);\n const globalAttributes = globalAttributesUpdate(attributes, data);\n const localAttributes = localAttributesCreate(attributes, data, 'default', _id);\n const relationshipAttributes = relationshipAttributesCreate(attributes, data);\n const responseType = entityNamePlural;\n const attributeNamesList = formatResponseFieldsForMutation(schema, responseType, 'default');\n\n return (\n `mutation {\\n` +\n ` create${pluralizedEntityName}(\\n` +\n ` input: [{\\n` +\n ` _id: \"${_id}\"` +\n ` ${globalAttributes}` +\n ` ${localAttributes}\\n` +\n ` ${relationshipAttributes}\\n` +\n ` }]\\n` +\n ` ) {\\n` +\n ` ${responseType} {\\n` +\n ` ${attributeNamesList}` +\n ` }\\n` +\n ` }\\n` +\n `}\\n`\n );\n}\n\nfunction localAttributesCreate(\n schemaAttributes: Attribute[],\n data: FormEntityItem,\n defaultScope: string,\n _id: string\n): string {\n const localAttributes = pick(getAttributeListByScope('local', schemaAttributes) as [string], data);\n const attributesArray = toPairs(localAttributes);\n const attributesString: string = attributesArray.reduce((acc, [attributeName, attributeValue]) => {\n if (!attributeValue?.value) {\n return acc;\n }\n\n const attributeSchema = find(propEq(attributeName, 'name'))(schemaAttributes) as Attribute;\n const typedValue = Array.isArray(attributeValue.value)\n ? 'null'\n : stringifyValue(attributeSchema.dataType, attributeValue.value);\n\n return (\n `${acc}\\n` +\n ` ${attributeName}: {\\n` +\n ` create: {\\n` +\n ` node: {\\n` +\n ` _id: \"${_id}:${attributeName}\"\\n` +\n ` _type: \"${attributeSchema.dataType}\"\\n` +\n ` ${defaultScope}: ${typedValue}\\n` +\n ` }\\n` +\n ` }\\n` +\n ` }`\n );\n }, '');\n\n return attributesString;\n}\n\nfunction relationshipAttributesCreate(schemaAttributes: Attribute[], data: FormEntityItem): string {\n const relationshipAttributes = pick(getAttributeListByScope('relationship', schemaAttributes) as [string], data);\n const attributesArray = toPairs(relationshipAttributes);\n const attributesString: string = attributesArray.reduce((acc, [attributeName, attributeValue]) => {\n const attributeSchema = find(propEq(attributeName, 'name'))(schemaAttributes) as Attribute;\n const { inputType, relationship } = attributeSchema;\n\n if (inputType === 'relationship' && relationship?.mode === 'single') {\n const connect = `connect: {\\n where: {\\n node: {\\n _id: \"${\n attributeValue._id ?? ''\n }\"\\n }\\n }\\n }\\n`;\n\n return `${acc}\\n ${attributeName}: {\\n ${connect} }`;\n }\n\n const isMultipleRelationship = inputType === 'relationship' && relationship?.mode === 'multiple';\n const hasRelationships =\n Array.isArray(attributeValue.relationships?.connect) && attributeValue.relationships.connect.length > 0;\n if (isMultipleRelationship && hasRelationships) {\n const connections = (attributeValue.relationships?.connect as MultipleRelationshipConnection | null) ?? [];\n const nodesToConnect: string | undefined = connections.reduce((connectString: string, node) => {\n return `${connectString} {\\n _id: \"${node._id}\"\\n }\\n`;\n }, '');\n const connect = nodesToConnect\n ? `connect: {\\n where: {\\n node: {\\n OR: [\\n${nodesToConnect} ]\\n }\\n }\\n }\\n`\n : '';\n\n return `${acc}\\n ${attributeName}: {\\n ${connect} }`;\n }\n\n return `${acc}\\n`;\n }, '');\n\n return attributesString;\n}\n\n/**\n * Find the attribute of an entity with isPrimary === true.\n * if none is found, return the first attribute.\n */\nfunction getPrimaryAttribute(schemaAttributes: Attribute[]): Attribute {\n return schemaAttributes.find((attr) => attr.isPrimary) ?? schemaAttributes[0];\n}\n\nexport function getRelatedItemsQuery({\n attributeName,\n relatedEntityName,\n scope,\n schema,\n}: {\n attributeName: string;\n relatedEntityName: string;\n scope: string;\n schema: Schema;\n}): EntityQuery {\n const filters = `(where: $where, options: $options)`;\n const entitySchema = find(propEq(relatedEntityName, 'name'))(schema) as Entity | undefined;\n const attributes = entitySchema?.attributes ?? [];\n const heading = `$where: ${relatedEntityName}Where, $options: ${relatedEntityName}Options`;\n const queryEntityName = entitySchema?.plural ?? '';\n\n if (attributes.length === 0) {\n return {\n queryEntityName: '',\n query: '',\n };\n }\n\n const globalAttributesList: string = getAttributeListByScope('global', attributes).join('\\n ');\n const localAttributes: readonly string[] = getAttributeListByScope(['local'], attributes);\n const defaultScopedAttr = localAttributes.reduce(\n (acc, attribute) => `${acc}\\n ${attribute} {\\n _id\\n default\\n }\\n `,\n ''\n );\n const scopedAttribute = localAttributes.reduce(\n (acc, attribute) => `${acc}\\n ${attribute} {\\n _id\\n default\\n ${scope}\\n }\\n `,\n ''\n );\n const localAttributesList: string = scope === 'default' ? defaultScopedAttr : scopedAttribute;\n\n const relationshipAttributes = filter(propEq('relationship', 'scope'))(attributes);\n const relationshipAttributesList: string = relationshipAttributes.reduce((acc, attribute) => {\n const relatedEntity = find(propEq(attribute.relationship?.entity, 'name'))(schema) as Entity | undefined;\n const attributesNameList = relatedEntity?.attributes.reduce((relatedAcc, relatedAttribute) => {\n const additionalScope = scope === 'default' ? '' : `${scope}\\n `;\n\n if (relatedAttribute.scope === 'local') {\n return `${relatedAcc}\\n ${relatedAttribute.name} {\\n _id\\n default\\n ${additionalScope}}\\n `;\n }\n\n if (relatedAttribute.scope === 'relationship') {\n const relationshipEntity = find(propEq(relatedAttribute.relationship?.entity, 'name'))(schema) as\n | Entity\n | undefined;\n const relationshipAttribute = find(propEq(relatedAttribute.relationship?.field, 'name'))(\n relationshipEntity?.attributes ?? []\n ) as Attribute;\n const localAttributeQuery =\n relationshipAttribute.scope === 'local'\n ? `{\\n _id\\n default\\n ${additionalScope}}\\n `\n : '';\n\n if (relatedAttribute.relationship?.mode === 'single') {\n return `${relatedAcc}\\n ${relatedAttribute.name} {\\n ${relatedAttribute.relationship.field} ${localAttributeQuery}}\\n `;\n }\n\n if (relatedAttribute.relationship?.field) {\n return `${relatedAcc}\\n ${relatedAttribute.name} (options: {limit: 25, offset: 0}) {\\n ${relatedAttribute.relationship.field} ${localAttributeQuery}}\\n `;\n }\n }\n\n return `${relatedAcc}\\n ${relatedAttribute.name}\\n `;\n }, '');\n\n return `${acc}\\n ${attribute.name} (options: {limit: 25, offset: 0}) { _id ${attributesNameList ?? ''}}\\n`;\n }, '');\n\n return {\n queryEntityName,\n query:\n `query getEntity(${heading}) {\\n` +\n ` ${attributeName}Aggregate(where: $where) {\\n` +\n ` count\\n` +\n ` }\\n` +\n ` ${queryEntityName}${filters} {\\n` +\n ` _id\\n` +\n ` ${globalAttributesList}` +\n ` ${localAttributesList}` +\n ` ${relationshipAttributesList}` +\n ` }\\n` +\n `}\\n`,\n };\n}\n\nexport function getAssetCreateMutation(entityData: EntityData): string {\n const attributes = assetSchema.attributes;\n const pluralizedEntityName = capitalize(assetSchema.plural);\n const _id = uuidv4();\n const data = filterOutInvalidAttributes(attributes, entityData);\n const globalAttributes = globalAttributesUpdate(attributes, data);\n const responseType = assetSchema.plural;\n const attributeNamesList = formatResponseFieldsForMutation([assetSchema, tagSchema], responseType, 'default');\n\n return (\n `mutation {\\n` +\n ` create${pluralizedEntityName}(\\n` +\n ` input: [{\\n` +\n ` _id: \"${_id}\"` +\n ` ${globalAttributes}` +\n ` }]\\n` +\n ` ) {\\n` +\n ` ${responseType} {\\n` +\n ` ${attributeNamesList}` +\n ` }\\n` +\n ` }\\n` +\n `}\\n`\n );\n}\n\nconst capitalize = (str: string): string => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\nexport function getEntitySchema(schema: Schema, entityNamePlural: string): Entity | undefined {\n if (entityNamePlural === '_assets') {\n return assetSchema;\n }\n\n return find(propEq(entityNamePlural, 'plural'))(schema) as Entity | undefined;\n}\n","import type { ErrorLike } from '@apollo/client';\nimport { ServerError } from '@apollo/client/errors';\n\ntype ErrorWithCause = ErrorLike & { cause?: unknown };\n\nfunction hasCause(error: ErrorLike): error is ErrorWithCause {\n if (!error) {\n return false;\n }\n\n return 'cause' in (error as ErrorWithCause);\n}\n\nexport function getServerError(error?: ErrorLike): ServerError | null {\n if (!error) {\n return null;\n }\n\n if (ServerError.is(error)) {\n return error;\n }\n\n if (hasCause(error)) {\n const possibleServerError = error.cause;\n\n if (ServerError.is(possibleServerError)) {\n return possibleServerError;\n }\n }\n\n return null;\n}\n\nexport function parseErrorBody<T>(bodyText: string | undefined): T | null {\n if (!bodyText) {\n return null;\n }\n\n try {\n return JSON.parse(bodyText) as T;\n } catch {\n return null;\n }\n}\n","import { useEffect, useState } from 'react';\nimport type { Dispatch, SetStateAction } from 'react';\nimport { gql } from '@apollo/client';\nimport type { DocumentNode, ErrorLike } from '@apollo/client';\nimport { useApolloClient, useMutation } from '@apollo/client/react';\nimport type { MutationHookOptions } from '@apollo/client/react';\nimport { getAssetCreateMutation } from './queries';\nimport type { FormEntityItem, EntityData } from './types';\nimport { getServerError, parseErrorBody } from './error-utils';\n\nexport function useCreateAssetMutation(): (entityData: FormEntityItem) => Promise<void> {\n const apolloClient = useApolloClient();\n\n return async (entityData: FormEntityItem): Promise<void> => {\n const mutation = getAssetCreateMutation(entityData as unknown as EntityData);\n\n await apolloClient.mutate({\n mutation: gql`\n ${mutation}\n `,\n });\n };\n}\n\ntype EntityMutationResponse = [\n Dispatch<SetStateAction<boolean>>,\n Dispatch<SetStateAction<DocumentNode>>,\n Dispatch<SetStateAction<object>>,\n {\n data: unknown;\n loading: boolean;\n error: ErrorLike | undefined;\n isProjectDisabled: boolean;\n isProjectReadOnly: boolean;\n },\n];\n\nexport function useEntityMutation(): EntityMutationResponse {\n const [runMutation, setRunMutation] = useState(false);\n const [mutation, setMutation] = useState(gql`\n mutation updateEntity($any: Any) {\n any\n }\n `);\n const [options, setOptions] = useState<MutationHookOptions>({});\n const [mutateFunction, { data, loading, error }] = useMutation(mutation, options);\n\n // Parse 403 error response to determine the specific error code\n const serverError = getServerError(error);\n\n const { isProjectDisabled, isProjectReadOnly } = (() => {\n if (serverError?.statusCode === 403) {\n const responseBody = parseErrorBody<{ code?: string }>(serverError.bodyText);\n\n if (responseBody && typeof responseBody.code === 'string') {\n if (responseBody.code === 'PROJECT_PAUSED') {\n return {\n isProjectDisabled: true,\n isProjectReadOnly: false,\n };\n }\n\n if (responseBody.code === 'READ_ONLY_MODE') {\n return {\n isProjectDisabled: false,\n isProjectReadOnly: true,\n };\n }\n }\n\n return {\n isProjectDisabled: true,\n isProjectReadOnly: false,\n };\n }\n\n return {\n isProjectDisabled: false,\n isProjectReadOnly: false,\n };\n })();\n\n useEffect(() => {\n if (runMutation) {\n void mutateFunction();\n setRunMutation(false);\n }\n }, [runMutation, mutateFunction]);\n\n return [setRunMutation, setMutation, setOptions, { data, loading, error, isProjectDisabled, isProjectReadOnly }];\n}\n","import { Badge } from '../../ui/primitives/badge';\n\nexport function Tags({ value }: { value: string }) {\n if (!value || !value.split(',').length) {\n return null;\n }\n\n return (\n <div className=\"fk-flex fk-flex-wrap fk-gap-1 fk-max-w-full truncate\">\n {value.split(',').map((tag) => (\n <Badge\n className=\"fk-px-2.5 fk-py-0 fk-font-normal fk-text-[0.6875rem] fk-leading-4\"\n key={tag}\n variant=\"secondary\"\n >\n {tag}\n </Badge>\n ))}\n </div>\n );\n}\n","import { ComponentType } from 'react';\nimport type { CellContext, ColumnDef, Row, Table } from '@tanstack/react-table';\nimport type { Attribute } from '../core/types';\nimport type { AttributeValue } from '../graphql-client/types';\nimport { useConfig } from '../core/config/config-context';\nimport { Checkbox } from '../ui/primitives/checkbox';\nimport { Boolean as BooleanPrefiewField } from './preview-components/boolean';\nimport { Text as TextPreviewField } from './preview-components/text';\nimport { Editor as EditorPreviewField } from './preview-components/editor';\nimport { Asset as AssetPreviewField } from './preview-components/asset';\nimport { DateTime as DateTimePreviewField } from './preview-components/datetime';\nimport { Tags as TagsPreviewField } from './preview-components/tags';\n\ntype Props<TData> = {\n attributesSchema: Attribute[];\n checkboxSelect?: 'single' | 'multiple'; // whether to include a checkbox column for row selection\n actionsComponent?: (row: Row<TData>) => JSX.Element; // a component to be displayed in the actions column of the grid\n};\n\ntype ColumnDefinition<TData extends AttributeValue, TValue> = ColumnDef<TData, TValue> & { id?: string; size: number };\n\nexport function useGridColumnsDefinition<TData extends AttributeValue, TValue>({\n attributesSchema,\n checkboxSelect,\n actionsComponent,\n}: Props<TData>): ColumnDefinition<TData, TValue>[] {\n const { getContributionPointConfig } = useConfig();\n const inputTypeToPreviewFieldMap = {\n 'datetime': 'datetime',\n 'editor': 'editor',\n 'asset': 'asset',\n 'number': 'text',\n 'relationship': 'text',\n 'select': 'text',\n 'switch': 'boolean',\n 'text': 'text',\n 'textarea': 'text',\n };\n const previewFieldComponentsMap = {\n 'boolean': BooleanPrefiewField,\n 'date': TextPreviewField,\n 'datetime': DateTimePreviewField,\n 'editor': EditorPreviewField,\n 'asset': AssetPreviewField,\n 'number': TextPreviewField,\n 'relationship': TextPreviewField,\n 'select': TextPreviewField,\n 'switch': BooleanPrefiewField,\n 'text': TextPreviewField,\n 'textarea': TextPreviewField,\n 'tags': TagsPreviewField,\n };\n\n const cols = attributesSchema\n .map((attribute) => {\n const previewType =\n attribute.previewType ??\n inputTypeToPreviewFieldMap[attribute.inputType as keyof typeof inputTypeToPreviewFieldMap];\n const previewComponent =\n (getContributionPointConfig('previewFields', [previewType])?.[0]?.component as unknown as\n | ComponentType<{ value: TData }>\n | undefined) ??\n previewFieldComponentsMap[previewType as keyof typeof previewFieldComponentsMap] ??\n previewFieldComponentsMap['text'];\n\n if (attribute.isHidden) {\n return null;\n }\n\n const isTagsPreview = previewType === 'tags';\n\n return {\n accessorKey: attribute.name,\n filterFn: (row: Row<TData>, id: string, value: string | string[]) => {\n if (isTagsPreview) {\n return true;\n }\n\n const selectedValues = Array.isArray(value) ? value : [value];\n\n return selectedValues.includes(row.getValue(id));\n },\n header: () => <div className=\"fk-flex fk-items-center\">{attribute.label}</div>,\n cell: ({ row }: CellContext<TData, TValue>) => {\n const PreviewComponent = previewComponent as ComponentType<{ value: TData }>;\n\n // TODO: Pass the complete row data to the preview component, so it can concatenate values from other attributes (i.e. for the \"image dimensions\" column)\n // console.log(row.getAllCells());\n return <PreviewComponent value={row.getValue(attribute.name)} />;\n },\n enableSorting: false,\n enableHiding: true,\n size: attribute.options?.size ?? 150,\n };\n })\n .filter((column) => column !== null);\n\n const actions = {\n id: 'actions',\n cell: ({ row }: CellContext<TData, TValue>) => (actionsComponent ? actionsComponent(row) : null),\n size: 80,\n };\n\n const singleCheckboxSelect = {\n id: 'select',\n cell: ({ row, table }: CellContext<TData, TValue>) => (\n <Checkbox\n aria-label=\"Select row\"\n checked={row.getIsSelected()}\n onCheckedChange={(value) => {\n table.toggleAllPageRowsSelected(false);\n row.toggleSelected(Boolean(value));\n }}\n />\n ),\n enableSorting: false,\n enableHiding: false,\n size: 50,\n };\n\n const multipleCheckboxSelect = {\n id: 'select',\n header: ({ table }: { table: Table<unknown> }) => (\n <Checkbox\n aria-label=\"Select all\"\n checked={table.getIsAllPageRowsSelected() || (table.getIsSomePageRowsSelected() && 'indeterminate')}\n onCheckedChange={(value) => {\n table.toggleAllPageRowsSelected(Boolean(value));\n }}\n />\n ),\n cell: ({ row }: CellContext<TData, TValue>) => (\n <Checkbox\n aria-label=\"Select row\"\n checked={row.getIsSelected()}\n onCheckedChange={(value) => {\n row.toggleSelected(Boolean(value));\n }}\n />\n ),\n enableSorting: false,\n enableHiding: false,\n size: 50,\n };\n\n return [\n ...(checkboxSelect === 'single' ? [singleCheckboxSelect] : []),\n ...(checkboxSelect === 'multiple' ? [multipleCheckboxSelect] : []),\n ...(actionsComponent ? [actions] : []),\n ...cols,\n ];\n}\n","'use client';\n\nimport { useRef, useState } from 'react';\nimport type { ReactElement, UIEvent } from 'react';\nimport {\n flexRender,\n getCoreRowModel,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table';\nimport type {\n ColumnDef,\n ColumnFiltersState,\n Updater,\n Row,\n RowSelectionState,\n SortingState,\n Table,\n TableMeta,\n VisibilityState,\n} from '@tanstack/react-table';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport {\n Table as TablePrimitive,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '../ui/primitives/table';\nimport { cn } from '../ui/lib/utils';\nimport type { AttributeValue } from '../graphql-client/types';\nimport type { MultipleRelationshipConnection } from '../core/types';\n\ninterface DataTableProps<TData extends AttributeValue, TValue> {\n classNames?: {\n wrapper?: string;\n table?: string;\n row?: string;\n };\n columns: ColumnDef<AttributeValue, TValue>[];\n data: TData[];\n entityName: string;\n initialSelectionState?: RowSelectionState;\n onEntitySelectionChange?: (rowSelection: string[]) => void;\n onScroll?: (event: UIEvent<HTMLDivElement>) => void;\n pageSize?: number;\n rowAdditionState?: MultipleRelationshipConnection;\n rowDeletionState?: string[];\n toolbarComponent?: (table: Table<AttributeValue>) => ReactElement;\n}\n\ninterface ExtendedDataTable extends TableMeta<unknown> {\n getRowBackground: (row: Row<AttributeValue>) => string;\n}\n\nexport function DataTable<TData extends AttributeValue, TValue>({\n classNames,\n columns,\n data,\n initialSelectionState,\n onEntitySelectionChange,\n onScroll,\n pageSize,\n rowAdditionState,\n rowDeletionState,\n toolbarComponent,\n}: DataTableProps<TData, TValue>): JSX.Element {\n const scrollRef = useRef<HTMLDivElement>(null);\n const [rowSelection, setRowSelection] = useState(initialSelectionState ?? {});\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>({});\n const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);\n const [sorting, setSorting] = useState<SortingState>([]);\n\n const table = useReactTable({\n data,\n columns,\n state: {\n sorting,\n columnVisibility,\n rowSelection,\n columnFilters,\n },\n initialState: {\n pagination: {\n pageSize: pageSize ?? 25,\n },\n },\n enableRowSelection: true,\n onRowSelectionChange: handleRowSelectionChange,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFacetedRowModel: getFacetedRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n getRowId: (row) => row._id,\n manualPagination: true,\n meta: {\n getRowBackground: (row: Row<AttributeValue>) => getRowClassnames(row, rowDeletionState, rowAdditionState),\n },\n });\n\n const { rows } = table.getRowModel();\n const rowVirtualizer = useVirtualizer({\n count: rows.length,\n estimateSize: () => 45, //estimate row height for accurate scrollbar dragging\n getScrollElement: () => scrollRef.current,\n //measure dynamic row height, except in firefox because it measures table border height incorrectly\n measureElement:\n typeof window !== 'undefined' && navigator.userAgent.includes('Firefox')\n ? (element) => element.getBoundingClientRect().height\n : undefined,\n overscan: 5,\n });\n\n function handleRowSelectionChange(updaterFn: Updater<RowSelectionState>): void {\n const selectedIds = typeof updaterFn === 'function' ? Object.keys(updaterFn(rowSelection)) : Object.keys(updaterFn);\n\n setRowSelection(updaterFn);\n onEntitySelectionChange?.(selectedIds);\n }\n\n return (\n <div className={cn('fk-w-full fk-h-full fk-space-y-4', classNames?.wrapper)}>\n {toolbarComponent && toolbarComponent(table)}\n <TablePrimitive className={cn('fk-grid fk-pb-[5rem]', classNames?.table)} onScroll={onScroll} ref={scrollRef}>\n <TableHeader className=\"fk-grid\">\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow className=\"fk-flex fk-w-full\" key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n return (\n <TableHead\n className={cn('fk-flex fk-items-center', header.column.id === 'actions' && 'fk-pl-0')}\n colSpan={header.colSpan}\n key={header.id}\n style={header.getSize() ? { width: `${header.getSize().toString()}px` } : {}}\n >\n {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}\n </TableHead>\n );\n })}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody\n className=\"fk-grid fk-relative\"\n style={{\n height: `${rowVirtualizer.getTotalSize().toString()}px`, //tells scrollbar how big the table is\n }}\n >\n {rowVirtualizer.getVirtualItems().length ? (\n rowVirtualizer.getVirtualItems().map((virtualRow) => {\n const row = rows[virtualRow.index];\n\n return (\n <TableRow\n className={`${(table.options.meta as ExtendedDataTable).getRowBackground(\n row\n )} fk-flex fk-absolute fk-w-full ${classNames?.row ?? ''}`}\n data-index={virtualRow.index}\n data-state={row.getIsSelected() && 'selected'}\n key={virtualRow.key}\n ref={rowVirtualizer.measureElement}\n style={{\n transform: `translateY(${virtualRow.start.toString()}px)`,\n }}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell\n className={cn('fk-flex fk-items-center fk-truncate', cell.column.id === 'actions' && '!fk-pl-0')}\n key={cell.id}\n style={{\n width: cell.column.getSize(),\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n );\n })\n ) : (\n <TableRow>\n <TableCell className=\"fk-h-24 fk-text-center\" colSpan={columns.length}>\n No results.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </TablePrimitive>\n </div>\n );\n}\n\nfunction getRowClassnames(\n row: Row<AttributeValue>,\n rowDeletionState?: string[],\n rowAdditionState?: MultipleRelationshipConnection\n): string {\n if (rowDeletionState?.includes(row.original._id)) {\n return 'fk-bg-row-removed hover:fk-bg-row-removed-hover';\n }\n\n if (rowAdditionState?.some((line) => line._id === row.original._id)) {\n return 'fk-bg-row-added hover:fk-bg-row-added-hover';\n }\n\n return '';\n}\n"]}
@@ -1,2 +0,0 @@
1
- import {a as a$1}from'./chunk-A6DNMUGW.js';import*as n from'react';import*as a from'@radix-ui/react-dialog';import {X,Search}from'lucide-react';import {jsx,jsxs}from'react/jsx-runtime';import {Command}from'cmdk';import*as l from'@radix-ui/react-scroll-area';var P=a.Root,G=a.Trigger,x=a.Portal,O=a.Close,D=n.forwardRef(({className:t,...e},o)=>jsx(a.Overlay,{className:a$1("fk-fixed fk-inset-0 fk-z-50 fk-bg-background/80 fk-backdrop-blur-sm data-[state=open]:fk-animate-in data-[state=closed]:fk-animate-out data-[state=closed]:fk-fade-out-0 data-[state=open]:fk-fade-in-0",t),ref:o,...e}));D.displayName=a.Overlay.displayName;var k=n.forwardRef(({className:t,children:e,...o},s)=>jsxs(x,{children:[jsx(D,{}),jsxs(a.Content,{className:a$1("fk-fixed fk-left-[50%] fk-top-[50%] fk-z-50 fk-grid fk-w-full fk-max-w-lg fk-translate-x-[-50%] fk-translate-y-[-50%] fk-gap-4 fk-border fk-border-border fk-bg-background fk-p-6 fk-shadow-lg fk-duration-200 data-[state=open]:fk-animate-in data-[state=closed]:fk-animate-out data-[state=closed]:fk-fade-out-0 data-[state=open]:fk-fade-in-0 data-[state=closed]:fk-zoom-out-95 data-[state=open]:fk-zoom-in-95 data-[state=closed]:fk-slide-out-to-left-1/2 data-[state=closed]:fk-slide-out-to-top-[48%] data-[state=open]:fk-slide-in-from-left-1/2 data-[state=open]:fk-slide-in-from-top-[48%] sm:fk-rounded-lg",t),ref:s,...o,children:[e,jsxs(a.Close,{className:"fk-absolute fk-right-4 fk-top-4 fk-rounded-sm fk-opacity-70 fk-ring-offset-background fk-transition-opacity hover:fk-opacity-100 focus:fk-outline-none focus:fk-ring-2 focus:fk-ring-ring focus:fk-ring-offset-2 disabled:fk-pointer-events-none data-[state=open]:fk-bg-accent data-[state=open]:fk-text-muted-foreground",children:[jsx(X,{className:"fk-h-4 fk-w-4"}),jsx("span",{className:"fk-sr-only",children:"Close"})]})]})]}));k.displayName=a.Content.displayName;function g({className:t,...e}){return jsx("div",{className:a$1("fk-flex fk-flex-col fk-space-y-1.5 fk-text-center sm:fk-text-left",t),...e})}g.displayName="DialogHeader";function b({className:t,...e}){return jsx("div",{className:a$1("fk-flex fk-flex-col-reverse sm:fk-flex-row sm:fk-justify-end sm:fk-space-x-2",t),...e})}b.displayName="DialogFooter";var u=n.forwardRef(({className:t,...e},o)=>jsx(a.Title,{className:a$1("fk-text-lg fk-font-semibold fk-leading-none fk-tracking-tight",t),ref:o,...e}));u.displayName=a.Title.displayName;var R=n.forwardRef(({className:t,...e},o)=>jsx(a.Description,{className:a$1("fk-text-sm fk-text-muted-foreground",t),ref:o,...e}));R.displayName=a.Description.displayName;var C=n.forwardRef(({className:t,...e},o)=>jsx(Command,{className:a$1("fk-flex fk-h-full fk-w-full fk-flex-col fk-overflow-hidden fk-rounded-md fk-bg-popover fk-text-popover-foreground",t),ref:o,...e}));C.displayName=Command.displayName;function K({children:t,...e}){return jsx(P,{...e,children:jsxs(k,{className:"fk-overflow-hidden fk-p-0 fk-shadow-lg",children:[jsxs(g,{className:"fk-sr-only",children:[jsx(u,{children:"Command menu"}),jsx(R,{children:"Search and run actions"})]}),jsx(C,{className:"[&_[cmdk-group-heading]]:fk-px-2 [&_[cmdk-group-heading]]:fk-font-medium [&_[cmdk-group-heading]]:fk-text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:fk-pt-0 [&_[cmdk-group]]:fk-px-2 [&_[cmdk-input-wrapper]_svg]:fk-h-5 [&_[cmdk-input-wrapper]_svg]:fk-w-5 [&_[cmdk-input]]:fk-h-12 [&_[cmdk-item]]:fk-px-2 [&_[cmdk-item]]:fk-py-3 [&_[cmdk-item]_svg]:fk-h-5 [&_[cmdk-item]_svg]:fk-w-5",children:t})]})})}var w=n.forwardRef(({className:t,...e},o)=>jsxs("div",{className:"fk-flex fk-items-center fk-border-b fk-border-border fk-px-3","cmdk-input-wrapper":"",children:[jsx(Search,{className:"fk-mr-2 fk-h-4 fk-w-4 fk-shrink-0 fk-opacity-50"}),jsx(Command.Input,{className:a$1("fk-flex fk-h-11 fk-w-full fk-rounded-md fk-bg-transparent fk-py-3 fk-text-sm fk-outline-none placeholder:fk-text-muted-foreground disabled:fk-cursor-not-allowed disabled:fk-opacity-50",t),ref:o,...e})]}));w.displayName=Command.Input.displayName;var A=n.forwardRef(({className:t,...e},o)=>jsx(Command.List,{className:a$1("fk-max-h-[300px] fk-overflow-y-auto fk-overflow-x-hidden",t),ref:o,...e}));A.displayName=Command.List.displayName;var E=n.forwardRef((t,e)=>jsx(Command.Empty,{className:"fk-py-6 fk-text-center fk-text-sm",ref:e,...t}));E.displayName=Command.Empty.displayName;var _=n.forwardRef(({className:t,...e},o)=>jsx(Command.Group,{className:a$1("fk-overflow-hidden fk-p-1 fk-text-foreground [&_[cmdk-group-heading]]:fk-px-2 [&_[cmdk-group-heading]]:fk-py-1.5 [&_[cmdk-group-heading]]:fk-text-xs [&_[cmdk-group-heading]]:fk-font-medium [&_[cmdk-group-heading]]:fk-text-muted-foreground",t),ref:o,...e}));_.displayName=Command.Group.displayName;var T=n.forwardRef(({className:t,...e},o)=>jsx(Command.Separator,{className:a$1("fk-mx-1 fk-h-px bg-border",t),ref:o,...e}));T.displayName=Command.Separator.displayName;var W=n.forwardRef(({className:t,...e},o)=>jsx(Command.Item,{className:a$1("fk-relative fk-flex fk-cursor-default fk-select-none fk-items-center fk-rounded-sm fk-px-2 fk-py-1.5 fk-text-sm fk-outline-none aria-selected:fk-bg-accent aria-selected:fk-text-accent-foreground data-[disabled=true]:fk-pointer-events-none data-[disabled=true]:fk-opacity-50",t),ref:o,...e}));W.displayName=Command.Item.displayName;function L({className:t,...e}){return jsx("span",{className:a$1("fk-ml-auto fk-text-xs fk-tracking-widest fk-text-muted-foreground",t),...e})}L.displayName="CommandShortcut";var H=n.forwardRef(({className:t,children:e,...o},s)=>jsxs(l.Root,{className:a$1("fk-relative fk-overflow-hidden",t),ref:s,...o,children:[jsx(l.Viewport,{className:"fk-h-full fk-w-full fk-rounded-[inherit]",children:e}),jsx(N,{}),jsx(l.Corner,{})]}));H.displayName=l.Root.displayName;var N=n.forwardRef(({className:t,orientation:e="vertical",...o},s)=>jsx(l.ScrollAreaScrollbar,{className:a$1("fk-flex fk-touch-none fk-select-none fk-transition-colors",e==="vertical"&&"fk-h-full fk-w-2.5 fk-border-l fk-border-l-transparent fk-p-[1px]",e==="horizontal"&&"fk-h-2.5 fk-flex-col fk-border-t fk-border-t-transparent fk-p-[1px]",t),orientation:e,ref:s,...o,children:jsx(l.ScrollAreaThumb,{className:"fk-relative fk-flex-1 fk-rounded-full fk-bg-border"})}));N.displayName=l.ScrollAreaScrollbar.displayName;export{P as a,G as b,x as c,O as d,D as e,k as f,g,b as h,u as i,R as j,C as k,K as l,w as m,A as n,E as o,_ as p,T as q,W as r,L as s,H as t,N as u};//# sourceMappingURL=chunk-VVAW7U22.js.map
2
- //# sourceMappingURL=chunk-VVAW7U22.js.map