@solidxai/core-ui 0.1.9-beta.16 → 0.1.9-beta.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/core/chatter/SolidChatterMessageBox.js +1 -1
- package/dist/components/core/chatter/SolidChatterMessageBox.js.map +1 -1
- package/dist/components/core/chatter/SolidChatterMessageBox.tsx +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.js +77 -42
- package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.tsx +43 -5
- package/dist/components/core/model/CreateModel.d.ts.map +1 -1
- package/dist/components/core/model/CreateModel.js +11 -24
- package/dist/components/core/model/CreateModel.js.map +1 -1
- package/dist/components/core/model/CreateModel.tsx +10 -22
- package/dist/components/core/model/FieldMetaDataForm.js +1 -1
- package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
- package/dist/components/core/model/FieldMetaDataForm.tsx +1 -1
- package/dist/components/core/model/ModelMetaData.d.ts.map +1 -1
- package/dist/components/core/model/ModelMetaData.js +6 -18
- package/dist/components/core/model/ModelMetaData.js.map +1 -1
- package/dist/components/core/model/ModelMetaData.tsx +8 -21
- package/dist/resources/globals.css +9 -7
- package/package.json +1 -1
|
@@ -141,7 +141,7 @@ export var SolidChatterMessageBox = function (props) {
|
|
|
141
141
|
var isTaskMessage = messageSubType === 'task';
|
|
142
142
|
var isTaskCompleted = (taskStatus !== null && taskStatus !== void 0 ? taskStatus : '').toLowerCase() === 'completed';
|
|
143
143
|
var isCustomMessage = messageType === 'custom';
|
|
144
|
-
var isEditableSubtype = messageSubType === '
|
|
144
|
+
var isEditableSubtype = messageSubType === 'note';
|
|
145
145
|
var isCurrentUserAuthor = !!(((_a = session === null || session === void 0 ? void 0 : session.user) === null || _a === void 0 ? void 0 : _a.id) && userId && Number(session.user.id) === Number(userId));
|
|
146
146
|
var canEditNote = Boolean(messageId && isCustomMessage && isEditableSubtype && isCurrentUserAuthor);
|
|
147
147
|
useEffect(function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidChatterMessageBox.js","sourceRoot":"","sources":["../../../../src/components/core/chatter/SolidChatterMessageBox.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AAC9E,OAAO,KAAK,MAAM,oBAAoB,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC5D,OAAO,MAAM,MAAM,sBAAsB,CAAA;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,cAAc,CAAA;AAC5F,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,SAAS,EAAE,aAAa,EAAsB,MAAM,kBAAkB,CAAA;AAE7K,OAAO,EAAE,8BAA8B,EAAE,mCAAmC,EAAE,MAAM,2CAA2C,CAAA;AAC/H,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AA0BtD,IAAM,WAAW,GAAG,UAAC,QAAgB;IACjC,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QAC/B,OAAO,UAAU,CAAC;KACrB;IACD,QAAQ,QAAQ,EAAE;QACd,KAAK,iBAAiB;YAClB,OAAO,aAAa,CAAC;QACzB,KAAK,0BAA0B,CAAC;QAChC,KAAK,mEAAmE;YACpE,OAAO,eAAe,CAAC;QAC3B,KAAK,oBAAoB,CAAC;QAC1B,KAAK,yEAAyE;YAC1E,OAAO,cAAc,CAAC;QAC1B,KAAK,YAAY;YACb,OAAO,SAAS,CAAC;QACrB;YACI,OAAO,SAAS,CAAC;KACxB;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,IAAM,sBAAsB,GAAG,UAAC,KAAY;;IACvC,IAAA,SAAS,GAAsI,KAAK,UAA3I,EAAE,IAAI,GAAgI,KAAK,KAArI,EAAE,MAAM,GAAwH,KAAK,OAA7H,EAAE,WAAW,GAA2G,KAAK,YAAhH,EAAE,OAAO,GAAkG,KAAK,QAAvG,EAAE,IAAI,GAA4F,KAAK,KAAjG,EAAE,WAAW,GAA+E,KAAK,YAApF,EAAE,KAAK,GAAwE,KAAK,MAA7E,EAAE,cAAc,GAAwD,KAAK,eAA7D,EAAE,MAAM,GAAgD,KAAK,OAArD,EAAE,gBAAgB,GAA8B,KAAK,iBAAnC,EAAE,YAAY,GAAgB,KAAK,aAArB,EAAE,SAAS,GAAK,KAAK,UAAV,CAAW;IACvJ,IAAA,KAAsC,QAAQ,CAAuB,EAAE,CAAC,EAAvE,cAAc,QAAA,EAAE,iBAAiB,QAAsC,CAAC;IACzE,IAAA,KAAkC,QAAQ,CAAC,KAAK,CAAC,EAAhD,YAAY,QAAA,EAAE,eAAe,QAAmB,CAAC;IAClD,IAAA,KAA8B,QAAQ,CAAqB,MAAM,CAAC,EAAjE,UAAU,QAAA,EAAE,aAAa,QAAwC,CAAC;IACnE,IAAA,KAA4B,QAAQ,CAAC,KAAK,CAAC,EAA1C,SAAS,QAAA,EAAE,YAAY,QAAmB,CAAC;IAC5C,IAAA,KAAkC,QAAQ,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC,EAAxD,YAAY,QAAA,EAAE,eAAe,QAA2B,CAAC;IAC1D,IAAA,KAAoC,QAAQ,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC,EAA1D,aAAa,QAAA,EAAE,gBAAgB,QAA2B,CAAC;IAC5D,IAAA,KAA8D,QAAQ,CAAC,KAAK,CAAC,EAA5E,0BAA0B,QAAA,EAAE,6BAA6B,QAAmB,CAAC;IAC9E,IAAA,KAAoC,QAAQ,CAAS,EAAE,CAAC,EAAvD,aAAa,QAAA,EAAE,gBAAgB,QAAwB,CAAC;IACzD,IAAA,KAAkD,QAAQ,CAAW,EAAE,CAAC,EAAvE,oBAAoB,QAAA,EAAE,uBAAuB,QAA0B,CAAC;IACzE,IAAA,KAAsE,QAAQ,CAAW,EAAE,CAAC,EAA3F,8BAA8B,QAAA,EAAE,iCAAiC,QAA0B,CAAC;IAC7F,IAAA,KAAkF,QAAQ,CAAC,KAAK,CAAC,EAAhG,oCAAoC,QAAA,EAAE,uCAAuC,QAAmB,CAAC;IACxG,IAAM,YAAY,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAC9C,IAAA,KAA6D,8BAA8B,EAAE,EAA5F,mBAAmB,QAAA,EAAe,oBAAoB,kBAAsC,CAAC;IAC9F,IAAA,KAA4D,mCAAmC,EAAE,EAAhG,wBAAwB,QAAA,EAAe,cAAc,kBAA2C,CAAC;IAChG,IAAM,OAAO,GAAK,UAAU,EAAE,KAAjB,CAAkB;IAEvC,IAAM,WAAW,GAAG,OAAO,CAAC;QACxB,IAAM,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAM,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC,CAAA;QAC9B,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,KAAK,OAAA,EAAE,CAAA;IACzC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,IAAM,QAAQ,GAAG,OAAO,CAAC;QACrB,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI;aACN,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAd,CAAc,CAAC;aAC3B,MAAM,CAAC,OAAO,CAAC;aACf,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,IAAI,CAAC,EAAE,CAAC;aACR,WAAW,EAAE,CAAC;IACvB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,IAAM,gBAAgB,GAAG,UAAC,GAAW;;QACjC,IAAM,gBAAgB,GAAG,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,kBAAkB,0CAAE,MAAM,CAAC,UAAA,GAAG,YAAI,OAAA,MAAA,GAAG,CAAC,QAAQ,0CAAE,UAAU,CAAC,QAAQ,CAAC,CAAA,EAAA,CAAC,KAAI,EAAE,CAAC;QAC5G,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE1C,IAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,SAAS,KAAK,GAAG,EAArB,CAAqB,CAAC,CAAC;QAC5E,IAAM,OAAO,GAAG,UAAU,IAAI,CAAC;YAC3B,CAAC,iCAAK,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,SAAK,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,QAClF,CAAC,CAAC,gBAAgB,CAAC;QAEvB,IAAM,MAAM,GAAyB,OAAO,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,CAAC;YACrD,GAAG,EAAE,GAAG,CAAC,SAAS;SACrB,CAAC,EAFsD,CAEtD,CAAC,CAAC;QAEJ,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1B,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF,IAAM,oBAAoB,GAAG;QACzB,QAAQ,WAAW,EAAE;YACjB,KAAK,OAAO;gBACR,OAAO,KAAC,wBAAwB,IAAC,WAAW,EAAE,WAAW,GAAI,CAAC;YAClE,KAAK,QAAQ,CAAC;YACd;gBACI,OAAO,KAAC,yBAAyB,IAAC,OAAO,EAAE,OAAO,GAAI,CAAC;SAC9D;IACL,CAAC,CAAC;IAEF,IAAM,YAAY,GAAG,WAAW,KAAK,OAAO;QACxC,CAAC,CAAC,CAAC,cAAc,KAAK,cAAc;YAChC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,cAAc,KAAK,cAAc;gBAC/B,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,cAAc,CAAC;QACzB,CAAC,CAAC,eAAe,CAAC;IAEtB,IAAM,QAAQ,GAAG,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC;IAErE,IAAM,aAAa,GAAG,cAAc,KAAK,MAAM,CAAC;IAChD,IAAM,eAAe,GAAG,CAAC,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC;IACzE,IAAM,eAAe,GAAG,WAAW,KAAK,QAAQ,CAAC;IACjD,IAAM,iBAAiB,GAAG,cAAc,KAAK,QAAQ,IAAI,cAAc,KAAK,MAAM,CAAC;IACnF,IAAM,mBAAmB,GAAG,CAAC,CAAC,CAAC,CAAA,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,0CAAE,EAAE,KAAI,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1G,IAAM,WAAW,GAAG,OAAO,CAAC,SAAS,IAAI,eAAe,IAAI,iBAAiB,IAAI,mBAAmB,CAAC,CAAC;IAEtG,SAAS,CAAC;QACN,IAAM,eAAe,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC;QAEtC,gEAAgE;QAChE,IAAI,0BAA0B,IAAI,eAAe,KAAK,YAAY,EAAE;YAChE,OAAO;SACV;QAED,IAAI,0BAA0B,IAAI,eAAe,KAAK,YAAY,EAAE;YAChE,6BAA6B,CAAC,KAAK,CAAC,CAAC;SACxC;QAED,eAAe,CAAC,eAAe,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,EAAE;YACZ,gBAAgB,CAAC,eAAe,CAAC,CAAC;SACrC;IACL,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,YAAY,CAAC,CAAC,CAAC;IAEnE,SAAS,CAAC;QACN,IAAI,CAAC,SAAS,EAAE;YACZ,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACrB,IAAI,CAAC,oCAAoC,EAAE;gBACvC,uBAAuB,CAAC,EAAE,CAAC,CAAC;aAC/B;SACJ;IACL,CAAC,EAAE,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC,CAAC;IAEtD,SAAS,CAAC;QACN,IAAI,CAAC,oCAAoC;YAAE,OAAO;QAClD,IAAM,mBAAmB,GAAG,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,kBAAkB,KAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAC,UAAU,IAAK,OAAA,UAAU,CAAC,EAAE,EAAb,CAAa,CAAC,CAAC;QACjG,IAAM,YAAY,GAAG,8BAA8B,CAAC,IAAI,CAAC,UAAC,EAAE,IAAK,OAAA,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAhC,CAAgC,CAAC,CAAC;QACnG,IAAI,CAAC,YAAY,EAAE;YACf,uCAAuC,CAAC,KAAK,CAAC,CAAC;YAC/C,iCAAiC,CAAC,EAAE,CAAC,CAAC;YACtC,uBAAuB,CAAC,EAAE,CAAC,CAAC;SAC/B;IACL,CAAC,EAAE,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,kBAAkB,EAAE,oCAAoC,EAAE,8BAA8B,CAAC,CAAC,CAAC;IAEtG,IAAM,gBAAgB,GAAG,UAAC,KAA0C;QAChE,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE;YACpB,IAAM,OAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7C,gBAAgB,CAAC,UAAA,IAAI,IAAI,uCAAI,IAAI,SAAK,OAAK,SAAlB,CAAmB,CAAC,CAAC;YAC9C,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;SAC3B;IACL,CAAC,CAAC;IAEF,IAAM,kBAAkB,GAAG;;;;;oBACvB,IAAI,CAAC,SAAS,IAAI,oBAAoB;wBAAE,sBAAO;;;;oBAE3C,qBAAM,mBAAmB,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAA;;oBAApF,SAAoF,CAAC;oBACrF,aAAa,CAAC,WAAW,CAAC,CAAC;oBAC3B,SAAS,aAAT,SAAS,uBAAT,SAAS,EAAI,CAAC;;;;;;;;SAIrB,CAAC;IAEF,IAAM,cAAc,GAAG;;;;;oBACnB,IAAI,CAAC,SAAS,IAAI,cAAc;wBAAE,sBAAO;oBACnC,cAAc,GAAG,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,EAAE,CAAC;oBACvC,aAAa,GAAG,cAAc,IAAI,cAAc,KAAK,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC5E,gBAAgB,GAAG,oBAAoB,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;oBACrF,IAAI,CAAC,aAAa,IAAI,CAAC,gBAAgB;wBAAE,sBAAO;oBAChD,IAAI,CAAC,cAAc;wBAAE,sBAAO;oBACtB,WAAW,GAAG,cAAc,CAAC;oBACnC,oEAAoE;oBACpE,eAAe,CAAC,WAAW,CAAC,CAAC;oBAC7B,6BAA6B,CAAC,IAAI,CAAC,CAAC;oBACpC,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;wBACjC,iCAAiC,CAAC,UAAC,IAAI,IAAK,OAAA,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,iCAAK,IAAI,SAAK,oBAAoB,QAAE,CAAC,EAAvD,CAAuD,CAAC,CAAC;wBACrG,uCAAuC,CAAC,IAAI,CAAC,CAAC;qBACjD;oBACD,YAAY,CAAC,KAAK,CAAC,CAAC;;;;oBAEV,aAAW,IAAI,QAAQ,EAAE,CAAC;oBAChC,UAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;oBAC5C,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;wBACjC,UAAQ,CAAC,MAAM,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;qBAC1E;oBACD,aAAa,CAAC,OAAO,CAAC,UAAC,IAAI,IAAK,OAAA,UAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,IAAI,CAAC,EAA3C,CAA2C,CAAC,CAAC;oBAE7E,qBAAM,wBAAwB,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,EAAA;;oBAA1E,SAA0E,CAAC;oBAC3E,SAAS,aAAT,SAAS,uBAAT,SAAS,EAAI,CAAC;;;;oBAEd,uCAAuC;oBACvC,eAAe,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC,CAAC;oBAC/B,6BAA6B,CAAC,KAAK,CAAC,CAAC;oBACrC,uCAAuC,CAAC,KAAK,CAAC,CAAC;oBAC/C,iCAAiC,CAAC,EAAE,CAAC,CAAC;oBACtC,YAAY,CAAC,IAAI,CAAC,CAAC;;;;;SAE1B,CAAC;IAEF,IAAM,gBAAgB,GAAG;QACrB,gBAAgB,CAAC,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,EAAE,CAAC,CAAC;QACrC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACrB,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAC5B,YAAY,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,IAAM,cAAc,GAAG,UAAC,IAAY;QAChC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI,IAAI,IAAI,GAAG,IAAI;YACtB,CAAC,CAAC,UAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAK;YAC3C,CAAC,CAAC,UAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAK,CAAC;IAC3C,CAAC,CAAC;IAEF,IAAM,mBAAmB,GAAG,IAAI,GAAG,iCAC5B,oBAAoB,SACpB,8BAA8B,QACnC,CAAC;IACH,IAAM,kBAAkB,GAAG,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,kBAAkB,KAAI,EAAE,CAAC,CAAC,MAAM,CAC/D,UAAC,UAAU,IAAK,OAAA,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,EAAvC,CAAuC,CAC1D,CAAC;IAEF,IAAM,sBAAsB,GAAG,UAAC,YAAoB;QAChD,uBAAuB,CAAC,UAAA,IAAI;YACxB,OAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;gBACvB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,KAAK,YAAY,EAAnB,CAAmB,CAAC;gBACxC,CAAC,iCAAK,IAAI,UAAE,YAAY,SAAC;QAF7B,CAE6B,CAChC,CAAC;IACN,CAAC,CAAC;IAEF,OAAO,CACH,eAAK,SAAS,EAAE,MAAM,CAAC,sBAAsB,aACzC,cAAK,SAAS,EAAE,MAAM,CAAC,uBAAuB,YAC1C,eAAK,SAAS,EAAE,MAAM,CAAC,yBAAyB,aAC5C,cAAK,SAAS,EAAE,MAAM,CAAC,kBAAkB,EAAE,KAAK,EAAE,WAAW,YACxD,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GACvC,EACN,eAAK,SAAS,EAAE,MAAM,CAAC,0BAA0B,aAC7C,eAAK,SAAS,EAAE,MAAM,CAAC,yBAAyB,aAC5C,eAAK,SAAS,EAAC,yCAAyC,aACpD,YAAG,SAAS,EAAE,MAAM,CAAC,gBAAgB,YAAG,IAAI,GAAK,EACjD,MAAC,YAAY,eACT,KAAC,mBAAmB,IAAC,OAAO,kBACxB,eACI,SAAS,EAAE,UAAG,MAAM,CAAC,iBAAiB,cAAI,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAE,gBACtF,YAAY,YAExB,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,GAAI,GACnB,GACW,EACtB,KAAC,mBAAmB,IAAC,IAAI,EAAC,OAAO,YAC5B,YAAY,GACK,IACX,IACb,EACN,eAAK,SAAS,EAAC,+BAA+B,aACzC,WAAW,IAAI,CAAC,SAAS,IAAI,CAC1B,KAAC,WAAW,IACR,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,OAAO,EACf,SAAS,EAAC,mBAAmB,EAC7B,QAAQ,EAAE,KAAC,MAAM,IAAC,IAAI,EAAE,EAAE,GAAI,EAC9B,OAAO,EAAE,cAAM,OAAA,YAAY,CAAC,IAAI,CAAC,EAAlB,CAAkB,gBACtB,WAAW,EACtB,KAAK,EAAC,WAAW,GACnB,CACL,EACD,eAAM,SAAS,EAAE,MAAM,CAAC,gBAAgB,YAAG,IAAI,GAAQ,IACrD,IACJ,EACL,gBAAgB,IAAI,CACjB,aAAG,SAAS,EAAE,UAAG,MAAM,CAAC,gBAAgB,SAAM,aACzC,gBAAgB,EAChB,YAAY,IAAI,0CAAK,eAAM,SAAS,EAAC,aAAa,YAAE,YAAY,GAAQ,IAAG,IAC5E,CACP,EACA,YAAY,IAAI,CAAC,SAAS,IAAI,CAC3B,cAAK,SAAS,EAAE,MAAM,CAAC,mBAAmB,YACrC,WAAW,KAAK,OAAO;wCACpB,CAAC,CAAC,KAAC,wBAAwB,IAAC,WAAW,EAAE,WAAW,GAAI;wCACxD,CAAC,CAAC,KAAC,yBAAyB,IAAC,OAAO,EAAE,YAAY,GAAI,GACxD,CACT,EACA,SAAS,IAAI,CACV,eAAK,SAAS,EAAC,wBAAwB,aACnC,KAAC,aAAa,IACV,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,UAAC,CAAC,IAAK,OAAA,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAhC,CAAgC,EACjD,IAAI,EAAE,CAAC,EACP,SAAS,EAAC,aAAa,GACzB,EACF,eAAK,SAAS,EAAC,wBAAwB,aACnC,gBACI,GAAG,EAAE,YAAY,EACjB,EAAE,EAAE,yBAAkB,SAAS,CAAE,EACjC,IAAI,EAAC,MAAM,EACX,QAAQ,QACR,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAC5B,EACD,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,CACzB,cAAK,SAAS,EAAC,wBAAwB,YAClC,aAAa,CAAC,GAAG,CAAC,UAAC,IAAI,EAAE,KAAK,IAAK,OAAA,CAChC,eAAmC,SAAS,EAAC,yDAAyD,aAClG,2BAAO,IAAI,CAAC,IAAI,QAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EACtD,KAAC,WAAW,IACR,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,OAAO,EACf,SAAS,EAAC,mBAAmB,EAC7B,QAAQ,EAAE,KAAC,CAAC,IAAC,IAAI,EAAE,EAAE,GAAI,EACzB,OAAO,EAAE,cAAM,OAAA,gBAAgB,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,KAAK,EAAX,CAAW,CAAC,EAAlC,CAAkC,CAAC,EAA5D,CAA4D,gBAC/D,iBAAU,IAAI,CAAC,IAAI,CAAE,GACnC,KAVI,UAAG,IAAI,CAAC,IAAI,cAAI,KAAK,CAAE,CAW3B,CACT,EAbmC,CAanC,CAAC,GACA,CACT,IACC,EACN,eAAK,SAAS,EAAC,iEAAiE,aAC5E,eAAK,SAAS,EAAC,+BAA+B,aAC1C,KAAC,WAAW,IACR,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,OAAO,EACf,SAAS,EAAC,mBAAmB,EAC7B,QAAQ,EAAE,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,GAAI,EACjC,OAAO,EAAE,sBAAM,OAAA,MAAA,YAAY,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAA,EAAA,gBACjC,cAAc,EACzB,KAAK,EAAC,cAAc,GACtB,EACF,eAAM,SAAS,EAAC,8BAA8B,4BAAmB,IAC/D,EACN,eAAK,SAAS,EAAC,mDAAmD,aAClE,KAAC,WAAW,IACR,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,EACjB,QAAQ,EAAE,KAAC,CAAC,IAAC,IAAI,EAAE,EAAE,GAAI,EACzB,OAAO,EAAE,gBAAgB,uBAGf,EACd,KAAC,WAAW,IACR,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,EACjB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,GAAI,EAC7B,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,CAAC,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,EAAE,CAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,qBAG9I,IACR,IACJ,IACJ,CACT,EACA,kBAAkB,CAAC,MAAM,GAAG,CAAC,IAAI,CAC9B,cAAK,SAAS,EAAE,MAAM,CAAC,uBAAuB,YACzC,kBAAkB,CAAC,GAAG,CAAC,UAAC,UAAU;wCAC/B,IAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;wCACzD,OAAO,CACH,eAAyB,SAAS,EAAE,MAAM,CAAC,sBAAsB,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,aAC7F,SAAS,IAAI,WAAW,IAAI,CACzB,KAAC,WAAW,IACR,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,OAAO,EACf,SAAS,EAAC,mBAAmB,EAC7B,QAAQ,EAAE,KAAC,MAAM,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,SAAS,GAAG,EAC9C,OAAO,EAAE,cAAM,OAAA,sBAAsB,CAAC,UAAU,CAAC,EAAE,CAAC,EAArC,CAAqC,gBACxC,iBAAU,UAAU,CAAC,gBAAgB,CAAE,EACnD,KAAK,EAAE,iBAAU,UAAU,CAAC,gBAAgB,CAAE,EAC9C,KAAK,EAAE;wDACH,QAAQ,EAAE,UAAU;wDACpB,GAAG,EAAE,CAAC,CAAC;wDACP,KAAK,EAAE,CAAC,CAAC;wDACT,MAAM,EAAE,CAAC;wDACT,UAAU,EAAE,MAAM;wDAClB,MAAM,EAAE,mBAAmB;wDAC3B,YAAY,EAAE,OAAO;qDACxB,GACH,CACL,EACA,OAAO,CAAC,CAAC,CAAC,CACP,cACI,SAAS,EAAC,gBAAgB,EAC1B,OAAO,EAAE,cAAM,OAAA,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,EAAtC,CAAsC,YAErD,KAAC,KAAK,IACF,GAAG,EAAE,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EACpC,GAAG,EAAE,UAAU,CAAC,gBAAgB,EAChC,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,GAC/B,GACA,CACT,CAAC,CAAC,CAAC,CACA,aACI,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EACrC,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EAC7B,SAAS,EAAC,4DAA4D,aAEtE,KAAC,SAAS,IAAC,IAAI,EAAE,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,wBAAgB,EACjE,yBAAO,UAAU,CAAC,gBAAgB,GAAQ,IAC1C,CACH,KA7CK,UAAU,CAAC,EAAE,CA8CjB,CACT,CAAC;oCACN,CAAC,CAAC,GACA,CACT,EACA,aAAa,IAAI,CACd,cAAK,SAAS,EAAC,6CAA6C,YACvD,eAAe,CAAC,CAAC,CAAC,CACf,MAAC,QAAQ,IAAC,IAAI,EAAC,SAAS,EAAC,SAAS,EAAC,wDAAwD,aACvF,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,wBAAgB,EAC/B,eAAM,SAAS,EAAC,aAAa,qBAAY,IAClC,CACd,CAAC,CAAC,CAAC,CACA,KAAC,WAAW,IACR,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,SAAS,EACjB,SAAS,EAAC,mBAAmB,EAC7B,QAAQ,EAAE,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,GAAI,EAC7B,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,kBAAkB,YAE3B,eAAM,SAAS,EAAC,eAAe,6BAAoB,GACzC,CACjB,GACC,CACT,IACC,IACJ,GACJ,EACL,YAAY,IAAI,CACb,KAAC,aAAa,IACV,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,cAAM,OAAA,eAAe,CAAC,KAAK,CAAC,EAAtB,CAAsB,GACvC,CACL,IACC,CACT,CAAA;AACL,CAAC,CAAA","sourcesContent":["\nimport { getTextColor, stringToColor } from '../../../helpers/getRandomColors'\nimport Image from \"../../common/Image\"\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport styles from './chatter.module.css'\nimport { SolidChatterCustomMessage } from './SolidChatterCustomMessage'\nimport { SolidChatterAuditMessage } from './SolidChatterAuditMessage'\nimport { Check, GitBranch, MessageSquare, Paperclip, Pencil, Trash2, X } from 'lucide-react'\nimport { SolidButton, SolidLightbox, SolidTag, SolidTooltip, SolidTooltipContent, SolidTooltipTrigger, SolidIcon, SolidTextarea, type SolidIconName } from '../../shad-cn-ui'\nimport type { SolidLightboxSlide } from '../../shad-cn-ui/SolidLightbox'\nimport { usePatchChatterMessageMutation, useUpdateChatterNoteMessageMutation } from '../../../redux/api/solidChatterMessageApi'\nimport { useSession } from '../../../hooks/useSession'\n\ninterface Props {\n messageId?: number | string,\n user: string,\n userId?: number,\n messageType?: string,\n message?: any,\n time?: string,\n auditRecord?: any,\n messageSubType?: string,\n status?: string,\n modelDisplayName?: string,\n modelUserKey?: string,\n onRefresh?: () => void,\n media?: {\n messageAttachments?: Array<{\n id: number;\n relativeUri: string;\n mimeType: string;\n originalFileName: string;\n _full_url: string;\n }>;\n };\n}\n\nconst getFileIcon = (mimeType: string): SolidIconName => {\n if (mimeType.startsWith('image/')) {\n return 'si-image';\n }\n switch (mimeType) {\n case 'application/pdf':\n return 'si-file-pdf';\n case 'application/vnd.ms-excel':\n case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':\n return 'si-file-excel';\n case 'application/msword':\n case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':\n return 'si-file-word';\n case 'text/plain':\n return 'si-file';\n default:\n return 'si-file';\n }\n};\n\nexport const SolidChatterMessageBox = (props: Props) => {\n const { messageId, user, userId, messageType, message, time, auditRecord, media, messageSubType, status, modelDisplayName, modelUserKey, onRefresh } = props;\n const [lightboxSlides, setLightboxSlides] = useState<SolidLightboxSlide[]>([]);\n const [openLightbox, setOpenLightbox] = useState(false);\n const [taskStatus, setTaskStatus] = useState<string | undefined>(status);\n const [isEditing, setIsEditing] = useState(false);\n const [localMessage, setLocalMessage] = useState(message ?? '');\n const [editedMessage, setEditedMessage] = useState(message ?? '');\n const [hasPendingOptimisticUpdate, setHasPendingOptimisticUpdate] = useState(false);\n const [selectedFiles, setSelectedFiles] = useState<File[]>([]);\n const [removedAttachmentIds, setRemovedAttachmentIds] = useState<number[]>([]);\n const [optimisticRemovedAttachmentIds, setOptimisticRemovedAttachmentIds] = useState<number[]>([]);\n const [hasPendingOptimisticAttachmentUpdate, setHasPendingOptimisticAttachmentUpdate] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [patchChatterMessage, { isLoading: isUpdatingTaskStatus }] = usePatchChatterMessageMutation();\n const [updateChatterNoteMessage, { isLoading: isUpdatingNote }] = useUpdateChatterNoteMessageMutation();\n const { data: session } = useSession();\n\n const avatarStyle = useMemo(() => {\n const bg = stringToColor(user)\n const color = getTextColor(bg)\n return { backgroundColor: bg, color }\n }, [user])\n\n const initials = useMemo(() => {\n if (!user) return \"\";\n return user\n .split(\" \")\n .map(part => part.charAt(0))\n .filter(Boolean)\n .slice(0, 2)\n .join(\"\")\n .toUpperCase();\n }, [user]);\n\n const handleImageClick = (url: string) => {\n const imageAttachments = media?.messageAttachments?.filter(att => att.mimeType?.startsWith('image/')) || [];\n if (imageAttachments.length === 0) return;\n\n const startIndex = imageAttachments.findIndex(att => att._full_url === url);\n const ordered = startIndex >= 0\n ? [...imageAttachments.slice(startIndex), ...imageAttachments.slice(0, startIndex)]\n : imageAttachments;\n\n const slides: SolidLightboxSlide[] = ordered.map(att => ({\n src: att._full_url\n }));\n\n setLightboxSlides(slides);\n setOpenLightbox(true);\n };\n\n const renderMessageContent = () => {\n switch (messageType) {\n case 'audit':\n return <SolidChatterAuditMessage auditRecord={auditRecord} />;\n case 'custom':\n default:\n return <SolidChatterCustomMessage message={message} />;\n }\n };\n\n const messageLabel = messageType === 'audit'\n ? (messageSubType === \"audit_update\"\n ? \"Updated\"\n : messageSubType === \"audit_insert\"\n ? \"Inserted\"\n : \"Audit record\")\n : \"Internal note\";\n\n const TypeIcon = messageType === 'audit' ? GitBranch : MessageSquare;\n\n const isTaskMessage = messageSubType === 'task';\n const isTaskCompleted = (taskStatus ?? '').toLowerCase() === 'completed';\n const isCustomMessage = messageType === 'custom';\n const isEditableSubtype = messageSubType === 'custom' || messageSubType === 'note';\n const isCurrentUserAuthor = !!(session?.user?.id && userId && Number(session.user.id) === Number(userId));\n const canEditNote = Boolean(messageId && isCustomMessage && isEditableSubtype && isCurrentUserAuthor);\n\n useEffect(() => {\n const incomingMessage = message ?? '';\n\n // Keep optimistic message visible until server data catches up.\n if (hasPendingOptimisticUpdate && incomingMessage !== localMessage) {\n return;\n }\n\n if (hasPendingOptimisticUpdate && incomingMessage === localMessage) {\n setHasPendingOptimisticUpdate(false);\n }\n\n setLocalMessage(incomingMessage);\n if (!isEditing) {\n setEditedMessage(incomingMessage);\n }\n }, [message, isEditing, hasPendingOptimisticUpdate, localMessage]);\n\n useEffect(() => {\n if (!isEditing) {\n setSelectedFiles([]);\n if (!hasPendingOptimisticAttachmentUpdate) {\n setRemovedAttachmentIds([]);\n }\n }\n }, [isEditing, hasPendingOptimisticAttachmentUpdate]);\n\n useEffect(() => {\n if (!hasPendingOptimisticAttachmentUpdate) return;\n const latestAttachmentIds = (media?.messageAttachments || []).map((attachment) => attachment.id);\n const stillPresent = optimisticRemovedAttachmentIds.some((id) => latestAttachmentIds.includes(id));\n if (!stillPresent) {\n setHasPendingOptimisticAttachmentUpdate(false);\n setOptimisticRemovedAttachmentIds([]);\n setRemovedAttachmentIds([]);\n }\n }, [media?.messageAttachments, hasPendingOptimisticAttachmentUpdate, optimisticRemovedAttachmentIds]);\n\n const handleFileSelect = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.files) {\n const files = Array.from(event.target.files);\n setSelectedFiles(prev => [...prev, ...files]);\n event.target.value = '';\n }\n };\n\n const handleMarkTaskDone = async () => {\n if (!messageId || isUpdatingTaskStatus) return;\n try {\n await patchChatterMessage({ id: messageId, data: { status: 'completed' } }).unwrap();\n setTaskStatus('completed');\n onRefresh?.();\n } catch (e) {\n // no-op (parent/global error handling if any)\n }\n };\n\n const handleEditSave = async () => {\n if (!messageId || isUpdatingNote) return;\n const trimmedMessage = editedMessage?.trim();\n const hasBodyChange = trimmedMessage && trimmedMessage !== (message ?? '').trim();\n const hasAttachmentOps = removedAttachmentIds.length > 0 || selectedFiles.length > 0;\n if (!hasBodyChange && !hasAttachmentOps) return;\n if (!trimmedMessage) return;\n const nextMessage = trimmedMessage;\n // Optimistic local update to remove UI lag before refetch resolves.\n setLocalMessage(nextMessage);\n setHasPendingOptimisticUpdate(true);\n if (removedAttachmentIds.length > 0) {\n setOptimisticRemovedAttachmentIds((prev) => Array.from(new Set([...prev, ...removedAttachmentIds])));\n setHasPendingOptimisticAttachmentUpdate(true);\n }\n setIsEditing(false);\n try {\n const formData = new FormData();\n formData.append('messageBody', nextMessage);\n if (removedAttachmentIds.length > 0) {\n formData.append('removeAttachmentIds', removedAttachmentIds.join(','));\n }\n selectedFiles.forEach((file) => formData.append('messageAttachments', file));\n\n await updateChatterNoteMessage({ id: messageId, data: formData }).unwrap();\n onRefresh?.();\n } catch (e) {\n // Revert optimistic update on failure.\n setLocalMessage(message ?? '');\n setHasPendingOptimisticUpdate(false);\n setHasPendingOptimisticAttachmentUpdate(false);\n setOptimisticRemovedAttachmentIds([]);\n setIsEditing(true);\n }\n };\n\n const handleCancelEdit = () => {\n setEditedMessage(localMessage ?? '');\n setSelectedFiles([]);\n setRemovedAttachmentIds([]);\n setIsEditing(false);\n };\n\n const formatFileSize = (size: number) => {\n if (!size) return '';\n return size >= 1024 * 1024\n ? `${(size / (1024 * 1024)).toFixed(1)} MB`\n : `${(size / 1024).toFixed(1)} KB`;\n };\n\n const hiddenAttachmentIds = new Set([\n ...removedAttachmentIds,\n ...optimisticRemovedAttachmentIds,\n ]);\n const visibleAttachments = (media?.messageAttachments || []).filter(\n (attachment) => !hiddenAttachmentIds.has(attachment.id)\n );\n\n const toggleRemoveAttachment = (attachmentId: number) => {\n setRemovedAttachmentIds(prev =>\n prev.includes(attachmentId)\n ? prev.filter(id => id !== attachmentId)\n : [...prev, attachmentId]\n );\n };\n\n return (\n <div className={styles.solidChatterMessageBox}>\n <div className={styles.solidChatterMessageCard}>\n <div className={styles.solidChatterMessageLayout}>\n <div className={styles.solidChatterAvatar} style={avatarStyle}>\n {initials || user.charAt(0).toUpperCase()}\n </div>\n <div className={styles.solidChatterMessageContent}>\n <div className={styles.solidChatterMessageHeader}>\n <div className='flex align-items-center gap-2 flex-wrap'>\n <p className={styles.solidChatterUser}>{user}</p>\n <SolidTooltip>\n <SolidTooltipTrigger asChild>\n <span\n className={`${styles.solidChatterBadge} ${messageType === 'audit' ? styles.audit : styles.custom}`}\n aria-label={messageLabel}\n >\n <TypeIcon size={12} />\n </span>\n </SolidTooltipTrigger>\n <SolidTooltipContent side=\"right\">\n {messageLabel}\n </SolidTooltipContent>\n </SolidTooltip>\n </div>\n <div className='flex align-items-center gap-2'>\n {canEditNote && !isEditing && (\n <SolidButton\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n className=\"solid-icon-button\"\n leftIcon={<Pencil size={12} />}\n onClick={() => setIsEditing(true)}\n aria-label=\"Edit note\"\n title=\"Edit note\"\n />\n )}\n <span className={styles.solidChatterTime}>{time}</span>\n </div>\n </div>\n {modelDisplayName && (\n <p className={`${styles.solidChatterMeta} m-0`}>\n {modelDisplayName}\n {modelUserKey && <> · <span className='font-medium'>{modelUserKey}</span></>}\n </p>\n )}\n {localMessage && !isEditing && (\n <div className={styles.solidMessageWrapper}>\n {messageType === 'audit'\n ? <SolidChatterAuditMessage auditRecord={auditRecord} />\n : <SolidChatterCustomMessage message={localMessage} />}\n </div>\n )}\n {isEditing && (\n <div className='flex flex-column gap-2'>\n <SolidTextarea\n value={editedMessage}\n onChange={(e) => setEditedMessage(e.target.value)}\n rows={4}\n className=\"w-full py-2\"\n />\n <div className='flex flex-column gap-2'>\n <input\n ref={fileInputRef}\n id={`note-edit-file-${messageId}`}\n type=\"file\"\n multiple\n onChange={handleFileSelect}\n style={{ display: 'none' }}\n />\n {selectedFiles.length > 0 && (\n <div className='flex flex-column gap-1'>\n {selectedFiles.map((file, index) => (\n <div key={`${file.name}-${index}`} className='flex align-items-center justify-content-between text-xs'>\n <span>{file.name} ({formatFileSize(file.size)})</span>\n <SolidButton\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n className='solid-icon-button'\n leftIcon={<X size={12} />}\n onClick={() => setSelectedFiles(prev => prev.filter((_, i) => i !== index))}\n aria-label={`Remove ${file.name}`}\n />\n </div>\n ))}\n </div>\n )}\n </div>\n <div className='flex align-items-center justify-content-between gap-2 flex-wrap'>\n <div className='flex align-items-center gap-2'>\n <SolidButton\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n className=\"solid-icon-button\"\n leftIcon={<Paperclip size={14} />}\n onClick={() => fileInputRef.current?.click()}\n aria-label=\"Attach files\"\n title=\"Attach files\"\n />\n <span className='text-xs text-color-secondary'>Attach file</span>\n </div>\n <div className='flex align-items-center justify-content-end gap-2'>\n <SolidButton\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n leftIcon={<X size={12} />}\n onClick={handleCancelEdit}\n >\n Cancel\n </SolidButton>\n <SolidButton\n type=\"button\"\n size=\"sm\"\n variant=\"primary\"\n loading={isUpdatingNote}\n leftIcon={<Check size={12} />}\n onClick={handleEditSave}\n disabled={!editedMessage?.trim() || (removedAttachmentIds.length === 0 && selectedFiles.length === 0 && editedMessage.trim() === (message ?? '').trim())}\n >\n Save\n </SolidButton>\n </div>\n </div>\n </div>\n )}\n {visibleAttachments.length > 0 && (\n <div className={styles.solidChatterAttachments}>\n {visibleAttachments.map((attachment) => {\n const isImage = attachment.mimeType.startsWith('image/');\n return (\n <div key={attachment.id} className={styles.solidChatterAttachment} style={{ position: 'relative' }}>\n {isEditing && canEditNote && (\n <SolidButton\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n className=\"solid-icon-button\"\n leftIcon={<Trash2 size={12} color=\"#dc2626\" />}\n onClick={() => toggleRemoveAttachment(attachment.id)}\n aria-label={`Remove ${attachment.originalFileName}`}\n title={`Remove ${attachment.originalFileName}`}\n style={{\n position: 'absolute',\n top: -8,\n right: -8,\n zIndex: 2,\n background: '#fff',\n border: '1px solid #fecaca',\n borderRadius: '999px',\n }}\n />\n )}\n {isImage ? (\n <div\n className='cursor-pointer'\n onClick={() => handleImageClick(attachment._full_url)}\n >\n <Image\n src={encodeURI(attachment._full_url)}\n alt={attachment.originalFileName}\n width={54}\n height={54}\n style={{ objectFit: 'cover' }}\n />\n </div>\n ) : (\n <a\n href={encodeURI(attachment._full_url)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className='flex align-items-center gap-2 text-decoration-none text-sm'\n >\n <SolidIcon name={getFileIcon(attachment.mimeType)} aria-hidden />\n <span>{attachment.originalFileName}</span>\n </a>\n )}\n </div>\n );\n })}\n </div>\n )}\n {isTaskMessage && (\n <div className='flex align-items-center justify-content-end'>\n {isTaskCompleted ? (\n <SolidTag tone=\"success\" className=\"inline-flex align-items-center gap-1 text-xs px-2 py-1\">\n <Check size={12} aria-hidden />\n <span className=\"font-medium\">Done</span>\n </SolidTag>\n ) : (\n <SolidButton\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n className=\"text-xs px-2 py-1\"\n leftIcon={<Check size={12} />}\n loading={isUpdatingTaskStatus}\n onClick={handleMarkTaskDone}\n >\n <span className=\"font-semibold\">Mark as done</span>\n </SolidButton>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n {openLightbox && (\n <SolidLightbox\n open={openLightbox}\n slides={lightboxSlides}\n onClose={() => setOpenLightbox(false)}\n />\n )}\n </div>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SolidChatterMessageBox.js","sourceRoot":"","sources":["../../../../src/components/core/chatter/SolidChatterMessageBox.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport { getTextColor, stringToColor } from '../../../helpers/getRandomColors'\nimport Image from \"../../common/Image\"\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport styles from './chatter.module.css'\nimport { SolidChatterCustomMessage } from './SolidChatterCustomMessage'\nimport { SolidChatterAuditMessage } from './SolidChatterAuditMessage'\nimport { Check, GitBranch, MessageSquare, Paperclip, Pencil, Trash2, X } from 'lucide-react'\nimport { SolidButton, SolidLightbox, SolidTag, SolidTooltip, SolidTooltipContent, SolidTooltipTrigger, SolidIcon, SolidTextarea, type SolidIconName } from '../../shad-cn-ui'\nimport type { SolidLightboxSlide } from '../../shad-cn-ui/SolidLightbox'\nimport { usePatchChatterMessageMutation, useUpdateChatterNoteMessageMutation } from '../../../redux/api/solidChatterMessageApi'\nimport { useSession } from '../../../hooks/useSession'\n\ninterface Props {\n messageId?: number | string,\n user: string,\n userId?: number,\n messageType?: string,\n message?: any,\n time?: string,\n auditRecord?: any,\n messageSubType?: string,\n status?: string,\n modelDisplayName?: string,\n modelUserKey?: string,\n onRefresh?: () => void,\n media?: {\n messageAttachments?: Array<{\n id: number;\n relativeUri: string;\n mimeType: string;\n originalFileName: string;\n _full_url: string;\n }>;\n };\n}\n\nconst getFileIcon = (mimeType: string): SolidIconName => {\n if (mimeType.startsWith('image/')) {\n return 'si-image';\n }\n switch (mimeType) {\n case 'application/pdf':\n return 'si-file-pdf';\n case 'application/vnd.ms-excel':\n case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':\n return 'si-file-excel';\n case 'application/msword':\n case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':\n return 'si-file-word';\n case 'text/plain':\n return 'si-file';\n default:\n return 'si-file';\n }\n};\n\nexport const SolidChatterMessageBox = (props: Props) => {\n const { messageId, user, userId, messageType, message, time, auditRecord, media, messageSubType, status, modelDisplayName, modelUserKey, onRefresh } = props;\n const [lightboxSlides, setLightboxSlides] = useState<SolidLightboxSlide[]>([]);\n const [openLightbox, setOpenLightbox] = useState(false);\n const [taskStatus, setTaskStatus] = useState<string | undefined>(status);\n const [isEditing, setIsEditing] = useState(false);\n const [localMessage, setLocalMessage] = useState(message ?? '');\n const [editedMessage, setEditedMessage] = useState(message ?? '');\n const [hasPendingOptimisticUpdate, setHasPendingOptimisticUpdate] = useState(false);\n const [selectedFiles, setSelectedFiles] = useState<File[]>([]);\n const [removedAttachmentIds, setRemovedAttachmentIds] = useState<number[]>([]);\n const [optimisticRemovedAttachmentIds, setOptimisticRemovedAttachmentIds] = useState<number[]>([]);\n const [hasPendingOptimisticAttachmentUpdate, setHasPendingOptimisticAttachmentUpdate] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const [patchChatterMessage, { isLoading: isUpdatingTaskStatus }] = usePatchChatterMessageMutation();\n const [updateChatterNoteMessage, { isLoading: isUpdatingNote }] = useUpdateChatterNoteMessageMutation();\n const { data: session } = useSession();\n\n const avatarStyle = useMemo(() => {\n const bg = stringToColor(user)\n const color = getTextColor(bg)\n return { backgroundColor: bg, color }\n }, [user])\n\n const initials = useMemo(() => {\n if (!user) return \"\";\n return user\n .split(\" \")\n .map(part => part.charAt(0))\n .filter(Boolean)\n .slice(0, 2)\n .join(\"\")\n .toUpperCase();\n }, [user]);\n\n const handleImageClick = (url: string) => {\n const imageAttachments = media?.messageAttachments?.filter(att => att.mimeType?.startsWith('image/')) || [];\n if (imageAttachments.length === 0) return;\n\n const startIndex = imageAttachments.findIndex(att => att._full_url === url);\n const ordered = startIndex >= 0\n ? [...imageAttachments.slice(startIndex), ...imageAttachments.slice(0, startIndex)]\n : imageAttachments;\n\n const slides: SolidLightboxSlide[] = ordered.map(att => ({\n src: att._full_url\n }));\n\n setLightboxSlides(slides);\n setOpenLightbox(true);\n };\n\n const renderMessageContent = () => {\n switch (messageType) {\n case 'audit':\n return <SolidChatterAuditMessage auditRecord={auditRecord} />;\n case 'custom':\n default:\n return <SolidChatterCustomMessage message={message} />;\n }\n };\n\n const messageLabel = messageType === 'audit'\n ? (messageSubType === \"audit_update\"\n ? \"Updated\"\n : messageSubType === \"audit_insert\"\n ? \"Inserted\"\n : \"Audit record\")\n : \"Internal note\";\n\n const TypeIcon = messageType === 'audit' ? GitBranch : MessageSquare;\n\n const isTaskMessage = messageSubType === 'task';\n const isTaskCompleted = (taskStatus ?? '').toLowerCase() === 'completed';\n const isCustomMessage = messageType === 'custom';\n const isEditableSubtype = messageSubType === 'note';\n const isCurrentUserAuthor = !!(session?.user?.id && userId && Number(session.user.id) === Number(userId));\n const canEditNote = Boolean(messageId && isCustomMessage && isEditableSubtype && isCurrentUserAuthor);\n\n useEffect(() => {\n const incomingMessage = message ?? '';\n\n // Keep optimistic message visible until server data catches up.\n if (hasPendingOptimisticUpdate && incomingMessage !== localMessage) {\n return;\n }\n\n if (hasPendingOptimisticUpdate && incomingMessage === localMessage) {\n setHasPendingOptimisticUpdate(false);\n }\n\n setLocalMessage(incomingMessage);\n if (!isEditing) {\n setEditedMessage(incomingMessage);\n }\n }, [message, isEditing, hasPendingOptimisticUpdate, localMessage]);\n\n useEffect(() => {\n if (!isEditing) {\n setSelectedFiles([]);\n if (!hasPendingOptimisticAttachmentUpdate) {\n setRemovedAttachmentIds([]);\n }\n }\n }, [isEditing, hasPendingOptimisticAttachmentUpdate]);\n\n useEffect(() => {\n if (!hasPendingOptimisticAttachmentUpdate) return;\n const latestAttachmentIds = (media?.messageAttachments || []).map((attachment) => attachment.id);\n const stillPresent = optimisticRemovedAttachmentIds.some((id) => latestAttachmentIds.includes(id));\n if (!stillPresent) {\n setHasPendingOptimisticAttachmentUpdate(false);\n setOptimisticRemovedAttachmentIds([]);\n setRemovedAttachmentIds([]);\n }\n }, [media?.messageAttachments, hasPendingOptimisticAttachmentUpdate, optimisticRemovedAttachmentIds]);\n\n const handleFileSelect = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.files) {\n const files = Array.from(event.target.files);\n setSelectedFiles(prev => [...prev, ...files]);\n event.target.value = '';\n }\n };\n\n const handleMarkTaskDone = async () => {\n if (!messageId || isUpdatingTaskStatus) return;\n try {\n await patchChatterMessage({ id: messageId, data: { status: 'completed' } }).unwrap();\n setTaskStatus('completed');\n onRefresh?.();\n } catch (e) {\n // no-op (parent/global error handling if any)\n }\n };\n\n const handleEditSave = async () => {\n if (!messageId || isUpdatingNote) return;\n const trimmedMessage = editedMessage?.trim();\n const hasBodyChange = trimmedMessage && trimmedMessage !== (message ?? '').trim();\n const hasAttachmentOps = removedAttachmentIds.length > 0 || selectedFiles.length > 0;\n if (!hasBodyChange && !hasAttachmentOps) return;\n if (!trimmedMessage) return;\n const nextMessage = trimmedMessage;\n // Optimistic local update to remove UI lag before refetch resolves.\n setLocalMessage(nextMessage);\n setHasPendingOptimisticUpdate(true);\n if (removedAttachmentIds.length > 0) {\n setOptimisticRemovedAttachmentIds((prev) => Array.from(new Set([...prev, ...removedAttachmentIds])));\n setHasPendingOptimisticAttachmentUpdate(true);\n }\n setIsEditing(false);\n try {\n const formData = new FormData();\n formData.append('messageBody', nextMessage);\n if (removedAttachmentIds.length > 0) {\n formData.append('removeAttachmentIds', removedAttachmentIds.join(','));\n }\n selectedFiles.forEach((file) => formData.append('messageAttachments', file));\n\n await updateChatterNoteMessage({ id: messageId, data: formData }).unwrap();\n onRefresh?.();\n } catch (e) {\n // Revert optimistic update on failure.\n setLocalMessage(message ?? '');\n setHasPendingOptimisticUpdate(false);\n setHasPendingOptimisticAttachmentUpdate(false);\n setOptimisticRemovedAttachmentIds([]);\n setIsEditing(true);\n }\n };\n\n const handleCancelEdit = () => {\n setEditedMessage(localMessage ?? '');\n setSelectedFiles([]);\n setRemovedAttachmentIds([]);\n setIsEditing(false);\n };\n\n const formatFileSize = (size: number) => {\n if (!size) return '';\n return size >= 1024 * 1024\n ? `${(size / (1024 * 1024)).toFixed(1)} MB`\n : `${(size / 1024).toFixed(1)} KB`;\n };\n\n const hiddenAttachmentIds = new Set([\n ...removedAttachmentIds,\n ...optimisticRemovedAttachmentIds,\n ]);\n const visibleAttachments = (media?.messageAttachments || []).filter(\n (attachment) => !hiddenAttachmentIds.has(attachment.id)\n );\n\n const toggleRemoveAttachment = (attachmentId: number) => {\n setRemovedAttachmentIds(prev =>\n prev.includes(attachmentId)\n ? prev.filter(id => id !== attachmentId)\n : [...prev, attachmentId]\n );\n };\n\n return (\n <div className={styles.solidChatterMessageBox}>\n <div className={styles.solidChatterMessageCard}>\n <div className={styles.solidChatterMessageLayout}>\n <div className={styles.solidChatterAvatar} style={avatarStyle}>\n {initials || user.charAt(0).toUpperCase()}\n </div>\n <div className={styles.solidChatterMessageContent}>\n <div className={styles.solidChatterMessageHeader}>\n <div className='flex align-items-center gap-2 flex-wrap'>\n <p className={styles.solidChatterUser}>{user}</p>\n <SolidTooltip>\n <SolidTooltipTrigger asChild>\n <span\n className={`${styles.solidChatterBadge} ${messageType === 'audit' ? styles.audit : styles.custom}`}\n aria-label={messageLabel}\n >\n <TypeIcon size={12} />\n </span>\n </SolidTooltipTrigger>\n <SolidTooltipContent side=\"right\">\n {messageLabel}\n </SolidTooltipContent>\n </SolidTooltip>\n </div>\n <div className='flex align-items-center gap-2'>\n {canEditNote && !isEditing && (\n <SolidButton\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n className=\"solid-icon-button\"\n leftIcon={<Pencil size={12} />}\n onClick={() => setIsEditing(true)}\n aria-label=\"Edit note\"\n title=\"Edit note\"\n />\n )}\n <span className={styles.solidChatterTime}>{time}</span>\n </div>\n </div>\n {modelDisplayName && (\n <p className={`${styles.solidChatterMeta} m-0`}>\n {modelDisplayName}\n {modelUserKey && <> · <span className='font-medium'>{modelUserKey}</span></>}\n </p>\n )}\n {localMessage && !isEditing && (\n <div className={styles.solidMessageWrapper}>\n {messageType === 'audit'\n ? <SolidChatterAuditMessage auditRecord={auditRecord} />\n : <SolidChatterCustomMessage message={localMessage} />}\n </div>\n )}\n {isEditing && (\n <div className='flex flex-column gap-2'>\n <SolidTextarea\n value={editedMessage}\n onChange={(e) => setEditedMessage(e.target.value)}\n rows={4}\n className=\"w-full py-2\"\n />\n <div className='flex flex-column gap-2'>\n <input\n ref={fileInputRef}\n id={`note-edit-file-${messageId}`}\n type=\"file\"\n multiple\n onChange={handleFileSelect}\n style={{ display: 'none' }}\n />\n {selectedFiles.length > 0 && (\n <div className='flex flex-column gap-1'>\n {selectedFiles.map((file, index) => (\n <div key={`${file.name}-${index}`} className='flex align-items-center justify-content-between text-xs'>\n <span>{file.name} ({formatFileSize(file.size)})</span>\n <SolidButton\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n className='solid-icon-button'\n leftIcon={<X size={12} />}\n onClick={() => setSelectedFiles(prev => prev.filter((_, i) => i !== index))}\n aria-label={`Remove ${file.name}`}\n />\n </div>\n ))}\n </div>\n )}\n </div>\n <div className='flex align-items-center justify-content-between gap-2 flex-wrap'>\n <div className='flex align-items-center gap-2'>\n <SolidButton\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n className=\"solid-icon-button\"\n leftIcon={<Paperclip size={14} />}\n onClick={() => fileInputRef.current?.click()}\n aria-label=\"Attach files\"\n title=\"Attach files\"\n />\n <span className='text-xs text-color-secondary'>Attach file</span>\n </div>\n <div className='flex align-items-center justify-content-end gap-2'>\n <SolidButton\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n leftIcon={<X size={12} />}\n onClick={handleCancelEdit}\n >\n Cancel\n </SolidButton>\n <SolidButton\n type=\"button\"\n size=\"sm\"\n variant=\"primary\"\n loading={isUpdatingNote}\n leftIcon={<Check size={12} />}\n onClick={handleEditSave}\n disabled={!editedMessage?.trim() || (removedAttachmentIds.length === 0 && selectedFiles.length === 0 && editedMessage.trim() === (message ?? '').trim())}\n >\n Save\n </SolidButton>\n </div>\n </div>\n </div>\n )}\n {visibleAttachments.length > 0 && (\n <div className={styles.solidChatterAttachments}>\n {visibleAttachments.map((attachment) => {\n const isImage = attachment.mimeType.startsWith('image/');\n return (\n <div key={attachment.id} className={styles.solidChatterAttachment} style={{ position: 'relative' }}>\n {isEditing && canEditNote && (\n <SolidButton\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n className=\"solid-icon-button\"\n leftIcon={<Trash2 size={12} color=\"#dc2626\" />}\n onClick={() => toggleRemoveAttachment(attachment.id)}\n aria-label={`Remove ${attachment.originalFileName}`}\n title={`Remove ${attachment.originalFileName}`}\n style={{\n position: 'absolute',\n top: -8,\n right: -8,\n zIndex: 2,\n background: '#fff',\n border: '1px solid #fecaca',\n borderRadius: '999px',\n }}\n />\n )}\n {isImage ? (\n <div\n className='cursor-pointer'\n onClick={() => handleImageClick(attachment._full_url)}\n >\n <Image\n src={encodeURI(attachment._full_url)}\n alt={attachment.originalFileName}\n width={54}\n height={54}\n style={{ objectFit: 'cover' }}\n />\n </div>\n ) : (\n <a\n href={encodeURI(attachment._full_url)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className='flex align-items-center gap-2 text-decoration-none text-sm'\n >\n <SolidIcon name={getFileIcon(attachment.mimeType)} aria-hidden />\n <span>{attachment.originalFileName}</span>\n </a>\n )}\n </div>\n );\n })}\n </div>\n )}\n {isTaskMessage && (\n <div className='flex align-items-center justify-content-end'>\n {isTaskCompleted ? (\n <SolidTag tone=\"success\" className=\"inline-flex align-items-center gap-1 text-xs px-2 py-1\">\n <Check size={12} aria-hidden />\n <span className=\"font-medium\">Done</span>\n </SolidTag>\n ) : (\n <SolidButton\n type=\"button\"\n size=\"sm\"\n variant=\"outline\"\n className=\"text-xs px-2 py-1\"\n leftIcon={<Check size={12} />}\n loading={isUpdatingTaskStatus}\n onClick={handleMarkTaskDone}\n >\n <span className=\"font-semibold\">Mark as done</span>\n </SolidButton>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n {openLightbox && (\n <SolidLightbox\n open={openLightbox}\n slides={lightboxSlides}\n onClose={() => setOpenLightbox(false)}\n />\n )}\n </div>\n )\n}\n"]}
|
|
@@ -130,7 +130,7 @@ export const SolidChatterMessageBox = (props: Props) => {
|
|
|
130
130
|
const isTaskMessage = messageSubType === 'task';
|
|
131
131
|
const isTaskCompleted = (taskStatus ?? '').toLowerCase() === 'completed';
|
|
132
132
|
const isCustomMessage = messageType === 'custom';
|
|
133
|
-
const isEditableSubtype = messageSubType === '
|
|
133
|
+
const isEditableSubtype = messageSubType === 'note';
|
|
134
134
|
const isCurrentUserAuthor = !!(session?.user?.id && userId && Number(session.user.id) === Number(userId));
|
|
135
135
|
const canEditNote = Boolean(messageId && isCustomMessage && isEditableSubtype && isCurrentUserAuthor);
|
|
136
136
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidGlobalSearchElement.d.ts","sourceRoot":"","sources":["../../../../src/components/core/common/SolidGlobalSearchElement.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgF,MAAM,OAAO,CAAC;AAYrG,OAA0B,EAAE,eAAe,EAAE,YAAY,EAAsB,MAAM,qBAAqB,CAAC;AA0B3G,MAAM,MAAM,eAAe,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,sBAAsB,EAAE,MAAM,CAAC;CAClC,CAAA;AAoUD,eAAO,MAAM,2BAA2B,sBAAuB,GAAG,aAAa,GAAG,yBAAyB,MAAM,iBAAiB,MAAM,QAavI,CAAA;AAGD,eAAO,MAAM,mBAAmB,iBAAkB,GAAG,gBAAgB,GAAG,eAAe,GAAG,qBAAqB,GAAG,kBAAkB,YAAY,EAAE,qBAAqB,eAAe,EAAE,QAwBvL,CAAA;AA0HD,eAAO,MAAM,wBAAwB,
|
|
1
|
+
{"version":3,"file":"SolidGlobalSearchElement.d.ts","sourceRoot":"","sources":["../../../../src/components/core/common/SolidGlobalSearchElement.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgF,MAAM,OAAO,CAAC;AAYrG,OAA0B,EAAE,eAAe,EAAE,YAAY,EAAsB,MAAM,qBAAqB,CAAC;AA0B3G,MAAM,MAAM,eAAe,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACrB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,sBAAsB,EAAE,MAAM,CAAC;CAClC,CAAA;AAoUD,eAAO,MAAM,2BAA2B,sBAAuB,GAAG,aAAa,GAAG,yBAAyB,MAAM,iBAAiB,MAAM,QAavI,CAAA;AAGD,eAAO,MAAM,mBAAmB,iBAAkB,GAAG,gBAAgB,GAAG,eAAe,GAAG,qBAAqB,GAAG,kBAAkB,YAAY,EAAE,qBAAqB,eAAe,EAAE,QAwBvL,CAAA;AA0HD,eAAO,MAAM,wBAAwB,kFA6oDnC,CAAC"}
|
|
@@ -479,7 +479,7 @@ var extractChips = function (node) {
|
|
|
479
479
|
return [];
|
|
480
480
|
};
|
|
481
481
|
export var SolidGlobalSearchElement = forwardRef(function (_a, ref) {
|
|
482
|
-
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
|
|
482
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
|
|
483
483
|
var viewData = _a.viewData, viewType = _a.viewType, handleApplyCustomFilter = _a.handleApplyCustomFilter, showSaveFilterPopup = _a.showSaveFilterPopup, setShowSaveFilterPopup = _a.setShowSaveFilterPopup, filterPredicates = _a.filterPredicates;
|
|
484
484
|
var defaultState = [
|
|
485
485
|
{
|
|
@@ -520,7 +520,7 @@ export var SolidGlobalSearchElement = forwardRef(function (_a, ref) {
|
|
|
520
520
|
var defaultGroupingRules = [
|
|
521
521
|
{ id: 1, fieldName: null, dateGrouping: null }
|
|
522
522
|
];
|
|
523
|
-
var
|
|
523
|
+
var _v = useState(defaultState), initialState = _v[0], setInitialState = _v[1];
|
|
524
524
|
var pathname = usePathname();
|
|
525
525
|
var searchableEntityLabel = ((_c = (_b = viewData === null || viewData === void 0 ? void 0 : viewData.data) === null || _b === void 0 ? void 0 : _b.solidView) === null || _c === void 0 ? void 0 : _c.displayName) ||
|
|
526
526
|
((_f = (_e = (_d = viewData === null || viewData === void 0 ? void 0 : viewData.data) === null || _d === void 0 ? void 0 : _d.solidView) === null || _e === void 0 ? void 0 : _e.model) === null || _f === void 0 ? void 0 : _f.displayName) ||
|
|
@@ -531,43 +531,50 @@ export var SolidGlobalSearchElement = forwardRef(function (_a, ref) {
|
|
|
531
531
|
var chipsRef = useRef(null);
|
|
532
532
|
// filterRules is used to maintian the ui of custom filter
|
|
533
533
|
// customFilter is used to maintian the transformed filter object of custom filter
|
|
534
|
-
var
|
|
535
|
-
var
|
|
536
|
-
var
|
|
537
|
-
var
|
|
538
|
-
var
|
|
539
|
-
var
|
|
540
|
-
var
|
|
534
|
+
var _w = useState(initialState), filterRules = _w[0], setFilterRules = _w[1];
|
|
535
|
+
var _x = useState(null), customFilter = _x[0], setCustomFilter = _x[1];
|
|
536
|
+
var _y = useState([]), fields = _y[0], setFields = _y[1];
|
|
537
|
+
var _z = useState([]), searchableFields = _z[0], setSearchableFields = _z[1];
|
|
538
|
+
var _0 = useState([]), groupableFields = _0[0], setGroupableFields = _0[1];
|
|
539
|
+
var _1 = useState(defaultGroupingRules), groupingRules = _1[0], setGroupingRules = _1[1];
|
|
540
|
+
var _2 = useState(defaultAggregationRules), aggregationRules = _2[0], setAggregationRules = _2[1];
|
|
541
541
|
// used to show the list of predefined searches
|
|
542
|
-
var
|
|
542
|
+
var _3 = useState([]), predefinedSearches = _3[0], setPredefinedSearches = _3[1];
|
|
543
543
|
// used to open / close the custom fitler popup
|
|
544
|
-
var
|
|
544
|
+
var _4 = useState(false), showGlobalSearchElement = _4[0], setShowGlobalSearchElement = _4[1];
|
|
545
545
|
// used to open / close the group fitler popup
|
|
546
|
-
var
|
|
546
|
+
var _5 = useState(false), showGroupFilterElement = _5[0], setShowGroupFilterElement = _5[1];
|
|
547
547
|
// searchChips maintain the ui to display searched query
|
|
548
548
|
// searchFilter maintain the transformed filter of the searched query
|
|
549
|
-
var
|
|
550
|
-
var
|
|
549
|
+
var _6 = useState([]), searchChips = _6[0], setSearchChips = _6[1];
|
|
550
|
+
var _7 = useState(null), searchFilter = _7[0], setSearchFilter = _7[1];
|
|
551
551
|
// predefinedSearchChip maintain the ui to display predefined searches query
|
|
552
|
-
var
|
|
552
|
+
var _8 = useState(null), predefinedSearchChip = _8[0], setPredefinedSearchChip = _8[1];
|
|
553
553
|
// state to maintain the text typed in the search input box
|
|
554
|
-
var
|
|
555
|
-
var
|
|
554
|
+
var _9 = useState(""), inputValue = _9[0], setInputValue = _9[1];
|
|
555
|
+
var _10 = useState(-1), focusedIndex = _10[0], setFocusedIndex = _10[1];
|
|
556
556
|
// flag to prevent un necessary re renders
|
|
557
|
-
var
|
|
557
|
+
var _11 = useState(false), hasSearched = _11[0], setHasSearched = _11[1];
|
|
558
558
|
// currentSavedFilterData is used to save the whole object of saved filter
|
|
559
|
-
var
|
|
560
|
-
var
|
|
561
|
-
var
|
|
562
|
-
var
|
|
563
|
-
var
|
|
564
|
-
var
|
|
565
|
-
var
|
|
566
|
-
var
|
|
559
|
+
var _12 = useState(), currentSavedFilterData = _12[0], setCurrentSavedFilterData = _12[1];
|
|
560
|
+
var _13 = useState(), currentSavedFilterQuery = _13[0], setCurrentSavedFilterQuery = _13[1];
|
|
561
|
+
var _14 = useState(), currentSavedFilterRules = _14[0], setCurrentSavedFilterRules = _14[1];
|
|
562
|
+
var _15 = useState(false), showSavedFilterComponent = _15[0], setShowSavedFilterComponent = _15[1];
|
|
563
|
+
var _16 = useState(), savedFilterTobeDeleted = _16[0], setSavedFilterTobeDeleted = _16[1];
|
|
564
|
+
var _17 = useState(false), isDeleteSQDialogVisible = _17[0], setIsDeleteSQDialogVisible = _17[1];
|
|
565
|
+
var _18 = useState(), savedFilterQueryString = _18[0], setSavedFilterQueryString = _18[1];
|
|
566
|
+
var _19 = useState(false), showOverlay = _19[0], setShowOverlay = _19[1];
|
|
567
567
|
var overlayRef = useRef(null);
|
|
568
|
-
var
|
|
568
|
+
var searchInputRef = useRef(null);
|
|
569
|
+
var _20 = useState(false), showChipManager = _20[0], setShowChipManager = _20[1];
|
|
569
570
|
var chipManagerRef = useRef(null);
|
|
570
571
|
var chipManagerTriggerRef = useRef(null);
|
|
572
|
+
var focusSearchInput = function () {
|
|
573
|
+
requestAnimationFrame(function () {
|
|
574
|
+
var _a;
|
|
575
|
+
(_a = searchInputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
576
|
+
});
|
|
577
|
+
};
|
|
571
578
|
useEffect(function () {
|
|
572
579
|
if (focusedIndex >= 0 && showOverlay) {
|
|
573
580
|
var activeElement = document.querySelector(".solid-search-overlay-option-active");
|
|
@@ -579,19 +586,19 @@ export var SolidGlobalSearchElement = forwardRef(function (_a, ref) {
|
|
|
579
586
|
}
|
|
580
587
|
}
|
|
581
588
|
}, [focusedIndex, showOverlay]);
|
|
582
|
-
var
|
|
589
|
+
var _21 = useSession(), session = _21.data, status = _21.status;
|
|
583
590
|
var user = session === null || session === void 0 ? void 0 : session.user;
|
|
584
|
-
var
|
|
585
|
-
var
|
|
586
|
-
var
|
|
587
|
-
var
|
|
591
|
+
var _22 = useState(0), refreshKey = _22[0], setRefreshKey = _22[1];
|
|
592
|
+
var _23 = useState(null), predefinedSearchBaseFilter = _23[0], setPredefinedSearchBaseFilter = _23[1];
|
|
593
|
+
var _24 = useState([]), savedFilters = _24[0], setSavedFilters = _24[1];
|
|
594
|
+
var _25 = useState(false), savedFiltersLoaded = _25[0], setSavedFiltersLoaded = _25[1];
|
|
588
595
|
var entityApi = createSolidEntityApi("savedFilters");
|
|
589
596
|
var useCreateSolidEntityMutation = entityApi.useCreateSolidEntityMutation, useDeleteSolidEntityMutation = entityApi.useDeleteSolidEntityMutation, useGetSolidEntityByIdQuery = entityApi.useGetSolidEntityByIdQuery, useUpdateSolidEntityMutation = entityApi.useUpdateSolidEntityMutation, useLazyGetSolidEntitiesQuery = entityApi.useLazyGetSolidEntitiesQuery;
|
|
590
|
-
var
|
|
591
|
-
var
|
|
592
|
-
var
|
|
593
|
-
var
|
|
594
|
-
var
|
|
597
|
+
var _26 = useCreateSolidEntityMutation(), createEntity = _26[0], _27 = _26[1], isEntityCreateSuccess = _27.isSuccess, isEntityCreateError = _27.isError, entityCreateError = _27.error;
|
|
598
|
+
var _28 = useUpdateSolidEntityMutation(), updateEntity = _28[0], _29 = _28[1], isEntityUpdateSuceess = _29.isSuccess, isEntityUpdateError = _29.isError, entityUpdateError = _29.error;
|
|
599
|
+
var _30 = useDeleteSolidEntityMutation(), deleteEntity = _30[0], _31 = _30[1], isEntityDeleteSuceess = _31.isSuccess, isEntityDeleteError = _31.isError, entityDeleteError = _31.error;
|
|
600
|
+
var _32 = useLazyGetSolidEntitiesQuery(), triggerGetSolidEntities = _32[0], _33 = _32[1], solidEntityListViewData = _33.data, isSavedFilterLoading = _33.isLoading, error = _33.error;
|
|
601
|
+
var _34 = useState(0), savedFilterFetchDataRefreshKey = _34[0], setSavedFilterFetchDataRefreshKey = _34[1];
|
|
595
602
|
useEffect(function () {
|
|
596
603
|
var fn = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
597
604
|
var filters, queryData, queryString, savedFilter;
|
|
@@ -1363,8 +1370,18 @@ export var SolidGlobalSearchElement = forwardRef(function (_a, ref) {
|
|
|
1363
1370
|
kind: "saved",
|
|
1364
1371
|
saved: s,
|
|
1365
1372
|
}); });
|
|
1366
|
-
|
|
1367
|
-
|
|
1373
|
+
var custom = [{
|
|
1374
|
+
id: "footer:custom",
|
|
1375
|
+
kind: "custom",
|
|
1376
|
+
}];
|
|
1377
|
+
var grouping = viewType === "tree"
|
|
1378
|
+
? [{
|
|
1379
|
+
id: "footer:grouping",
|
|
1380
|
+
kind: "grouping",
|
|
1381
|
+
}]
|
|
1382
|
+
: [];
|
|
1383
|
+
return __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], fields, true), predefined, true), saved, true), custom, true), grouping, true);
|
|
1384
|
+
}, [inputValue, searchableFields, predefinedSearches, savedFilters, viewType]);
|
|
1368
1385
|
var handleKeyDown = function (e) {
|
|
1369
1386
|
var currentValue = (inputValue === null || inputValue === void 0 ? void 0 : inputValue.trim()) || "";
|
|
1370
1387
|
var applyFieldOption = function (value) {
|
|
@@ -1407,6 +1424,12 @@ export var SolidGlobalSearchElement = forwardRef(function (_a, ref) {
|
|
|
1407
1424
|
else if ((activeOption === null || activeOption === void 0 ? void 0 : activeOption.kind) === "saved") {
|
|
1408
1425
|
applySavedFilter(activeOption.saved);
|
|
1409
1426
|
}
|
|
1427
|
+
else if ((activeOption === null || activeOption === void 0 ? void 0 : activeOption.kind) === "custom") {
|
|
1428
|
+
openCustomFilterDialog();
|
|
1429
|
+
}
|
|
1430
|
+
else if ((activeOption === null || activeOption === void 0 ? void 0 : activeOption.kind) === "grouping") {
|
|
1431
|
+
openGroupingDialog();
|
|
1432
|
+
}
|
|
1410
1433
|
else if (currentValue) {
|
|
1411
1434
|
handleAddChip();
|
|
1412
1435
|
setShowOverlay(false);
|
|
@@ -1490,7 +1513,7 @@ export var SolidGlobalSearchElement = forwardRef(function (_a, ref) {
|
|
|
1490
1513
|
};
|
|
1491
1514
|
var PredefinedSearchChip = function () { return (_jsx("li", { children: _jsxs("div", { className: "search-filter-chip-type", children: [_jsxs("div", { className: "flex align-items-center gap-2", children: [_jsxs("strong", { children: [predefinedSearchChip === null || predefinedSearchChip === void 0 ? void 0 : predefinedSearchChip.name, ":"] }), _jsx("span", { className: "custom-chip-value", children: predefinedSearchChip === null || predefinedSearchChip === void 0 ? void 0 : predefinedSearchChip.value })] }), _jsx("button", { type: "button", className: "ml-1", style: { cursor: "pointer" }, onClick: removePredefinedSearchChip, children: _jsx(X, { size: 14 }) })] }) })); };
|
|
1492
1515
|
// predefinedfilter related code end
|
|
1493
|
-
return (_jsx(_Fragment, { children: _jsxs("div", { className: "flex justify-content-center solid-custom-filter-wrapper relative", children: [_jsx("div", { className: "solid-global-search-element", children: _jsxs("ul", { className: "solid-global-search-chip-list", children: [visibleChipItems.map(function (chip) { return (_jsx("li", { children: _jsxs("div", { className: "search-filter-chip-type solid-chip-pill solid-chip-tone-".concat(chip.type), children: [_jsx("span", { className: "custom-chip-value solid-chip-pill-label", title: chip.label, children: chip.label }), _jsx("button", { type: "button", className: "solid-chip-pill-remove", onMouseDown: function (e) { return e.preventDefault(); }, onClick: chip.onRemove, "aria-label": "Remove ".concat(chip.label), children: _jsx(X, { size: 14 }) })] }) }, chip.id)); }), hiddenChipCount > 0 && (_jsx("li", { children: _jsxs("button", { type: "button", ref: chipManagerTriggerRef, className: "solid-chip-manage-trigger", onMouseDown: function (e) { return e.preventDefault(); }, onClick: function () { return setShowChipManager(function (prev) { return !prev; }); }, children: ["+", hiddenChipCount, " more"] }) })), managedChipItems.length > 0 && hiddenChipCount === 0 && (_jsx("li", { children: _jsx("button", { type: "button", ref: chipManagerTriggerRef, className: "solid-chip-manage-trigger solid-chip-manage-trigger-secondary", onMouseDown: function (e) { return e.preventDefault(); }, onClick: function () { return setShowChipManager(function (prev) { return !prev; }); }, children: "Manage" }) })), _jsx("li", { ref: chipsRef, className: "solid-global-search-input-item", children: _jsxs("div", { className: "relative solid-global-search-element-wrapper", children: [_jsx(SolidInput, { className: "solid-global-search-input", value: inputValue || "", placeholder: "Search.", onChange: function (e) {
|
|
1516
|
+
return (_jsx(_Fragment, { children: _jsxs("div", { className: "flex justify-content-center solid-custom-filter-wrapper relative", children: [_jsx("div", { className: "solid-global-search-element", children: _jsxs("ul", { className: "solid-global-search-chip-list", children: [visibleChipItems.map(function (chip) { return (_jsx("li", { children: _jsxs("div", { className: "search-filter-chip-type solid-chip-pill solid-chip-tone-".concat(chip.type), children: [_jsx("span", { className: "custom-chip-value solid-chip-pill-label", title: chip.label, children: chip.label }), _jsx("button", { type: "button", className: "solid-chip-pill-remove", onMouseDown: function (e) { return e.preventDefault(); }, onClick: chip.onRemove, "aria-label": "Remove ".concat(chip.label), children: _jsx(X, { size: 14 }) })] }) }, chip.id)); }), hiddenChipCount > 0 && (_jsx("li", { children: _jsxs("button", { type: "button", ref: chipManagerTriggerRef, className: "solid-chip-manage-trigger", onMouseDown: function (e) { return e.preventDefault(); }, onClick: function () { return setShowChipManager(function (prev) { return !prev; }); }, children: ["+", hiddenChipCount, " more"] }) })), managedChipItems.length > 0 && hiddenChipCount === 0 && (_jsx("li", { children: _jsx("button", { type: "button", ref: chipManagerTriggerRef, className: "solid-chip-manage-trigger solid-chip-manage-trigger-secondary", onMouseDown: function (e) { return e.preventDefault(); }, onClick: function () { return setShowChipManager(function (prev) { return !prev; }); }, children: "Manage" }) })), _jsx("li", { ref: chipsRef, className: "solid-global-search-input-item", children: _jsxs("div", { className: "relative solid-global-search-element-wrapper", children: [_jsx(SolidInput, { ref: searchInputRef, className: "solid-global-search-input", value: inputValue || "", placeholder: "Search.", onChange: function (e) {
|
|
1494
1517
|
setInputValue(e.target.value);
|
|
1495
1518
|
setShowChipManager(false);
|
|
1496
1519
|
setShowOverlay(true);
|
|
@@ -1502,9 +1525,13 @@ export var SolidGlobalSearchElement = forwardRef(function (_a, ref) {
|
|
|
1502
1525
|
}, onBlur: function () {
|
|
1503
1526
|
// Delay so you can click buttons inside overlay
|
|
1504
1527
|
setTimeout(function () { return setShowOverlay(false); }, 150);
|
|
1505
|
-
}, onKeyDown: handleKeyDown }), _jsx(SolidButton, { variant: "outline", size: "sm",
|
|
1528
|
+
}, onKeyDown: handleKeyDown }), _jsx(SolidButton, { variant: "outline", size: "sm", onMouseDown: function (e) {
|
|
1529
|
+
// Preserve input focus so overlay keyboard navigation continues to work.
|
|
1530
|
+
e.preventDefault();
|
|
1531
|
+
}, onClick: function () {
|
|
1506
1532
|
setShowChipManager(false);
|
|
1507
1533
|
setShowOverlay(true);
|
|
1534
|
+
focusSearchInput();
|
|
1508
1535
|
}, className: "custom-filter-button solid-global-search-trigger", children: _jsx(Search, { size: 14 }) })] }) })] }) }), showChipManager && managedChipItems.length > 0 && (_jsxs("div", { ref: chipManagerRef, className: "absolute z-5 solid-chip-manager-panel", children: [_jsxs("div", { className: "solid-chip-manager-header", children: [_jsxs("div", { className: "solid-chip-manager-title", children: ["Applied chips (", managedChipItems.length, ")"] }), _jsx("button", { type: "button", className: "solid-chip-manager-clear-btn", onClick: clearAllAppliedChips, children: "Clear all" })] }), _jsx("div", { className: "solid-chip-manager-body", children: managedChipItems.map(function (chip) { return (_jsxs("div", { className: "solid-chip-manager-item solid-chip-tone-".concat(chip.type), onClick: function () {
|
|
1509
1536
|
if (chip.id == "custom-filter" || chip.id == "grouping-rules") {
|
|
1510
1537
|
if (chip.onOpen) {
|
|
@@ -1543,7 +1570,15 @@ export var SolidGlobalSearchElement = forwardRef(function (_a, ref) {
|
|
|
1543
1570
|
if (optIndex !== -1)
|
|
1544
1571
|
setFocusedIndex(optIndex);
|
|
1545
1572
|
} }, savedfilter.id));
|
|
1546
|
-
}) })] }) })] }), _jsxs("div", { className: "solid-search-overlay-footer", children: [_jsx("button", { type: "button", className: "px-3 py-2 flex flex-column solid-search-overlay-footer-action
|
|
1573
|
+
}) })] }) })] }), _jsxs("div", { className: "solid-search-overlay-footer", children: [_jsx("button", { type: "button", className: "px-3 py-2 flex flex-column solid-search-overlay-footer-action ".concat(((_t = overlayOptions[focusedIndex]) === null || _t === void 0 ? void 0 : _t.id) === "footer:custom" ? "solid-search-overlay-option-active" : ""), onClick: openCustomFilterDialog, onMouseEnter: function () {
|
|
1574
|
+
var optIndex = overlayOptions.findIndex(function (o) { return o.id === "footer:custom"; });
|
|
1575
|
+
if (optIndex !== -1)
|
|
1576
|
+
setFocusedIndex(optIndex);
|
|
1577
|
+
}, children: _jsxs("div", { className: "solid-search-overlay-footer-action-main", children: [_jsx("div", { className: "solid-search-overlay-panel-callout-icon", children: _jsx(Filter, { size: 14 }) }), _jsxs("div", { className: "solid-search-overlay-panel-callout-copy", children: [_jsx("div", { className: "solid-search-overlay-footer-title solid-search-overlay-section-title", children: "Click here to apply custom filters" }), _jsx("div", { className: "solid-search-overlay-footer-subtitle", children: "Use custom filters to apply conditions on any field using any operator." })] })] }) }), viewType === "tree" && (_jsx("button", { type: "button", className: "px-3 py-2 flex flex-column solid-search-overlay-footer-action solid-search-overlay-footer-action-secondary ".concat(((_u = overlayOptions[focusedIndex]) === null || _u === void 0 ? void 0 : _u.id) === "footer:grouping" ? "solid-search-overlay-option-active" : ""), onClick: openGroupingDialog, onMouseEnter: function () {
|
|
1578
|
+
var optIndex = overlayOptions.findIndex(function (o) { return o.id === "footer:grouping"; });
|
|
1579
|
+
if (optIndex !== -1)
|
|
1580
|
+
setFocusedIndex(optIndex);
|
|
1581
|
+
}, children: _jsxs("div", { className: "solid-search-overlay-footer-action-main", children: [_jsx("div", { className: "solid-search-overlay-panel-callout-icon", children: _jsx(Plus, { size: 14 }) }), _jsxs("div", { className: "solid-search-overlay-panel-callout-copy", children: [_jsx("div", { className: "solid-search-overlay-footer-title solid-search-overlay-section-title", children: "Click here to do custom grouping" }), _jsx("div", { className: "solid-search-overlay-footer-subtitle", children: "Configure grouping rules and aggregations for the tree view." })] })] }) }))] })] })), _jsxs(SolidDialog, { open: showGlobalSearchElement, onOpenChange: setShowGlobalSearchElement, className: "solid-global-search-filter solid-filter-dialog-shell", style: { width: "min(960px, calc(100vw - 2rem))" }, children: [_jsxs(SolidDialogHeader, { className: "solid-filter-dialog-head", children: [_jsxs("div", { children: [_jsx(SolidDialogTitle, { className: "solid-filter-dialog-title m-0", children: "Add Custom Filter" }), _jsx(SolidDialogDescription, { className: "solid-filter-dialog-subtitle m-0", children: "Apply conditions on any field with operators." })] }), _jsx(SolidDialogClose, { className: "solid-filter-dialog-close" })] }), _jsx(SolidDialogSeparator, { className: "solid-filter-dialog-sep" }), _jsx(SolidDialogBody, { className: "solid-filter-dialog-body", children: fields.length > 0 &&
|
|
1547
1582
|
_jsx(FilterComponent, { viewData: viewData, fields: fields, filterRules: filterRules, setFilterRules: setFilterRules, transformFilterRules: transformCustomFilterRules, closeDialog: function () { return setShowGlobalSearchElement(false); } }) })] }), _jsxs(SolidDialog, { open: showGroupFilterElement, onOpenChange: setShowGroupFilterElement, className: "solid-global-search-filter solid-filter-dialog-shell solid-filter-dialog-shell-grouping", style: { width: "min(560px, calc(100vw - 2rem))" }, children: [_jsxs(SolidDialogHeader, { className: "solid-filter-dialog-head", children: [_jsxs("div", { children: [_jsx(SolidDialogTitle, { className: "solid-filter-dialog-title m-0", children: "Grouping" }), _jsx(SolidDialogDescription, { className: "solid-filter-dialog-subtitle m-0", children: "Configure grouping and aggregation." })] }), _jsx(SolidDialogClose, { className: "solid-filter-dialog-close" })] }), _jsx(SolidDialogSeparator, { className: "solid-filter-dialog-sep" }), _jsx(SolidDialogBody, { className: "solid-filter-dialog-body", children: groupableFields.length > 0 &&
|
|
1548
1583
|
_jsx(GroupingComponent, { viewData: viewData, fields: groupableFields, groupingRules: groupingRules, setGroupingRules: setGroupingRules, aggregationRules: aggregationRules, setAggregationRules: setAggregationRules, applyGrouping: applyGrouping, closeDialog: function () { return setShowGroupFilterElement(false); } }) })] }), _jsxs(SolidDialog, { open: showSavedFilterComponent, onOpenChange: setShowSavedFilterComponent, className: "solid-global-search-filter solid-filter-dialog-shell", style: { width: "min(960px, calc(100vw - 2rem))" }, children: [_jsxs(SolidDialogHeader, { className: "solid-filter-dialog-head", children: [_jsxs("div", { children: [_jsx(SolidDialogTitle, { className: "solid-filter-dialog-title m-0", children: "Saved Filter" }), _jsx(SolidDialogDescription, { className: "solid-filter-dialog-subtitle m-0", children: "Review and refine the saved filter conditions." })] }), _jsx(SolidDialogClose, { className: "solid-filter-dialog-close" })] }), _jsx(SolidDialogSeparator, { className: "solid-filter-dialog-sep" }), _jsx(SolidDialogBody, { className: "solid-filter-dialog-body", children: fields.length > 0 &&
|
|
1549
1584
|
_jsx(FilterComponent, { viewData: viewData, fields: fields, filterRules: currentSavedFilterRules, setFilterRules: setCurrentSavedFilterRules, transformFilterRules: transformSavedFilterRules, closeDialog: function () { return setShowSavedFilterComponent(false); } }) })] }), _jsxs(SolidDialog, { open: showSaveFilterPopup, onOpenChange: setShowSaveFilterPopup, className: "solid-custom-filter-dialog solid-save-filter-dialog", style: { width: "min(420px, calc(100vw - 2rem))" }, children: [_jsxs(SolidDialogHeader, { className: "solid-filter-dialog-head", children: [_jsxs("div", { children: [_jsx(SolidDialogTitle, { className: "solid-filter-dialog-title m-0", children: "Save Custom Filter" }), _jsx(SolidDialogDescription, { className: "solid-filter-dialog-subtitle m-0", children: "Name this filter so you can reuse it later." })] }), _jsx(SolidDialogClose, { className: "solid-filter-dialog-close" })] }), _jsx(SolidDialogSeparator, { className: "solid-filter-dialog-sep" }), _jsx(SolidDialogBody, { className: "solid-filter-dialog-body", children: _jsx(SolidSaveCustomFilterForm, { currentSavedFilterData: currentSavedFilterData, handleSaveFilter: handleSaveFilter, closeDialog: function () { return setShowSaveFilterPopup(false); } }) })] }), _jsxs(SolidDialog, { open: isDeleteSQDialogVisible, onOpenChange: setIsDeleteSQDialogVisible, className: "solid-confirm-dialog", style: { width: "min(420px, calc(100vw - 2rem))" }, children: [_jsxs(SolidDialogHeader, { children: [_jsxs("div", { children: [_jsx(SolidDialogTitle, { children: "Confirm Delete" }), _jsxs(SolidDialogDescription, { children: ["Are you sure you want to delete the ", currentSavedFilterData === null || currentSavedFilterData === void 0 ? void 0 : currentSavedFilterData.name, " saved query?"] })] }), _jsx(SolidDialogClose, {})] }), _jsx(SolidDialogSeparator, {}), _jsxs(SolidDialogFooter, { className: "justify-content-center", children: [_jsxs(SolidButton, { variant: "destructive", size: "sm", onClick: deleteSavedFilter, children: [_jsx(Check, { size: 14 }), "Yes"] }), _jsxs(SolidButton, { variant: "outline", size: "sm", onClick: function () { return setIsDeleteSQDialogVisible(false); }, children: [_jsx(X, { size: 14 }), "No"] })] })] })] }) }));
|