@infuro/cms-core 1.0.14 → 1.0.15
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/admin.cjs +232 -4
- package/dist/admin.cjs.map +1 -1
- package/dist/admin.js +232 -4
- package/dist/admin.js.map +1 -1
- package/dist/api.cjs +390 -58
- package/dist/api.cjs.map +1 -1
- package/dist/api.d.cts +1 -1
- package/dist/api.d.ts +1 -1
- package/dist/api.js +390 -58
- package/dist/api.js.map +1 -1
- package/dist/{index-Be8NLxu-.d.cts → index-BQnqJ7EO.d.cts} +2 -0
- package/dist/{index-CjBf9dAb.d.ts → index-BiagwMjV.d.ts} +2 -0
- package/dist/index.cjs +498 -198
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -3
- package/dist/index.d.ts +17 -3
- package/dist/index.js +498 -198
- package/dist/index.js.map +1 -1
- package/dist/migrations/1775000000000-ProductUomTypeOrderItemSnapshots.ts +29 -0
- package/package.json +1 -1
package/dist/admin.cjs
CHANGED
|
@@ -384,7 +384,7 @@ var AdminConfigContext = (0, import_react3.createContext)(defaultValue);
|
|
|
384
384
|
var INFURO_FAVICON_BASE64 = "data:image/x-icon;base64,AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAKBEAAJ4EAAAwMAAAAQAgAGgmAADGFQAAKAAAABAAAAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8V////bv///7D////R////0f///7D///9u////FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wL///9s0qun7q9qYv/DkYv/6tfV///+/v///////////////+7///9r////AgAAAAAAAAAAAAAAAP///wL///+Q/////sqcl/+WOzH/ljsx/5c9M//AiYP/+/j4/////////////////v///5D///8CAAAAAAAAAAD///9s/////v/////Oo5//lz00/5Y7Mf+WOzH/ljsx/7Z3cP/9+/v////////////////+////bAAAAAD///8V////7v///////////v39//Tq6f/QqKP/m0U8/5Y7Mf+WOzH/z6ah/////////////////////+7///8V////bv///////////////////////////////+XOy/+ZQTf/ljsx/59MQ//69fX/////////////////////bv///7D/////////////////////////////////////wYyG/5Y7Mf+WOzH/4MTC/////////////////////7D////R//////////////////7+//79/f/+/f3//v39/+DGw/+WOzH/ljsx/82inf/////////////////////R////0f///////////////9Svq/+mWVH/pllR/6ZZUf+iUUj/ljsx/5Y7Mf/KnJf/////////////////////0f///7D////////////////KnJf/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/062p/////////////////////7D///9u////////////////0amk/6FQSP+hUEj/oVBI/6JRSP+mWVH/plpS/+7g3v////////////////////9u////Ff///+7///////////7+/v/9/Pz/9u7t/8SSjP/Dj4r/9ezr//79/f/////////////////////u////FQAAAAD///9s/////v///////////////8OPif+WOzH/ljsx/7+Jgv/////////////////////+////bAAAAAAAAAAA////Av///5D////+//////////+9hH7/ljsx/5Y7Mf+8g3z////////////////+////kP///wIAAAAAAAAAAAAAAAD///8C////bP///+7/////8OTi/7R0bP+zcmr/8OLh///////////u////bP///wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8V////bv///7D////R////0f///7D///9u////FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Hf///0n///95////mf///67///+u////mf///3n///9J////Hf///wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8I////Tf///7D////p/////v////////////////////////////////////7////p////sP///03///8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Pfjz8r7HlpH7wY2H/86lof/iysf/9e3s///+/v//////////////////////////////////////////+////77///89////AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Cf///37////z9Ovq/6BORf+WOzH/ljsx/5Y8Mv+hUEf/v4iC/+rY1v/+/f3///////////////////////////////////////////H///99////CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wr///+d/////P/////06+r/oE5F/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/m0Q7/8WTjf/38PD///////////////////////////////////////////z///+d////CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8J////nf////3///////////Tr6v+gTkX/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/61mX//w4+L///////////////////////////////////////////3///+d////CQAAAAAAAAAAAAAAAAAAAAAAAAAA////Av///37////8////////////////9Ovq/6BORf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/6daUv/v4uD///////////////////////////////////////////z///9+////AgAAAAAAAAAAAAAAAAAAAAD///89////8//////////////////////48fD/rGRc/5pCOf+YPjT/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/6xkXf/37+////////////////////////////////////////////P///89AAAAAAAAAAAAAAAA////CP///77////////////////////////////////7+Pf/8eXj/+DGw/++hn//m0U8/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/8GLhf/9/Pz//////////////////////////////////////////77///8IAAAAAAAAAAD///9N////+/////////////////////////////////////////////////7+/v/p1tP/rGRd/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/mkI4/+XPzf//////////////////////////////////////////+////00AAAAA////Av///7D////////////////////////////////////////////////////////////////06+r/r2pi/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/tndw//38+///////////////////////////////////////////sP///wL///8d////6f/////////////////////////////////////////////////////////////////////x5eP/olJJ/5Y7Mf+WOzH/ljsx/5Y7Mf+aQjn/7dza///////////////////////////////////////////p////Hf///0n////+///////////////////////////////////////////////////////////////////////////Ur6v/ljwy/5Y7Mf+WOzH/ljsx/5Y7Mf/Oo5////////////////////////////////////////////7///9J////ef////////////////////////////////////////////////////////////////////////////////fw7/+jVEv/ljsx/5Y7Mf+WOzH/ljsx/7Nxav///////////////////////////////////////////////3n///+Z/////////////////////////////////////////////////////////////////////////////////////7yCfP+WOzH/ljsx/5Y7Mf+WOzH/pllQ//r29f//////////////////////////////////////////mf///67///////////////////////////////////////////79/f/9/Pz//fz8//38/P/9/Pz//fz8//38/P/9/Pz/yZuW/5Y7Mf+WOzH/ljsx/5Y7Mf+gT0b/9evr//////////////////////////////////////////+u////rv/////////////////////////////////////69vb/wo2I/7Z3cf+2d3H/tndx/7Z3cf+2d3H/tndx/7Z3cf+lV0//ljsx/5Y7Mf+WOzH/ljsx/6BORf/06+r//////////////////////////////////////////67///+Z//////////////////////////////////////Tr6v+gTkX/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/oE5F//Tr6v//////////////////////////////////////////mf///3n/////////////////////////////////////9Ovq/6BORf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+lVk7/+fPz//////////////////////////////////////////95////Sf////7////////////////////////////////06+r/oE5F/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/7FuZ////v7//////////////////////////////////////v///0n///8d////6f////////////////////////////////Tr6v+gTkX/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/zKCb///////////////////////////////////////////p////Hf///wL///+w////////////////////////////////+PLx/7d4cf+tZl//rWZf/61mX/+tZl//rWZf/61mX/+tZl//rmdg/7Z3cP+2d3H/tndx/7h7df/w4uH//////////////////////////////////////////7D///8CAAAAAP///03////7/////////////////////////////////Pv6//z6+f/8+vn//Pr5//z6+f/z6un/48zJ/+LKx//y5+b//fz8//38/P/9/Pz//fz8///////////////////////////////////////////7////TQAAAAAAAAAA////CP///77/////////////////////////////////////////////////////4MXC/6VXTv+WPDL/ljwy/6JRSP/aubb///7+/////////////////////////////////////////////////////77///8IAAAAAAAAAAAAAAAA////Pf////P///////////////////////////////////////////Xs6/+jU0r/ljsx/5Y7Mf+WOzH/ljsx/59MQv/w5OL////////////////////////////////////////////////z////PQAAAAAAAAAAAAAAAAAAAAD///8C////fv////z/////////////////////////////////////3sK//5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/9m5tf///////////////////////////////////////////P///37///8CAAAAAAAAAAAAAAAAAAAAAAAAAAD///8J////nf////3////////////////////////////////ZuLX/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/17Sw//////////////////////////////////////3///+d////CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8K////nf////z//////////////////////////+zc2v+aQzn/ljsx/5Y7Mf+WOzH/ljsx/5pDOf/r2tj////////////////////////////////8////nf///woAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8J////fv////P//////////////////////v39/8eYkv+YPjT/ljsx/5Y7Mf+YPjT/xpSP//79/f//////////////////////////8////37///8JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Pf///77////7/////////////////fv6/+DEwf/Ekoz/wY2H/97Bvv/8+vr/////////////////////+////77///89////AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////CP///03///+w////6f////7////////////////////////////////////+////6f///7D///9N////CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wL///8d////Sf///3n///+Z////rv///67///+Z////ef///0n///8d////AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8E////DP///xr///80////Rv///1n///9q////gP///4D///9q////Wf///0b///80////Gv///wz///8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////CP///y7///9g////lP///7v////V////6P////r////8/////P////z////8////+v///+j////V////u////5T///9g////Lv///wgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wf///81////k////8/////v////+v////////////////////////////////////////////////////////////////////r////v////z////5P///81////BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8G////Kv37+3zt3Nrd27y5/Nm6t//fxMH/59LQ//Dk4v/48vH//fv6//////////////////////////////////////////////////////////////////////z////d////fP///yr///8GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///xH///9g////wvz5+ffNop3+m0U8/5c+NP+cRz7/pFVN/65oYP+8gnv/0qun/+jU0v/59fT//v7+///////////////////////////////////////////////////////////+////9////8L///9f////EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////GP///4n////m/////fv4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+XPTT/m0Q6/6ZaUf/BjIX/6NXT//z5+f////////////////////////////////////////////////////////////////3////k////if///xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8i////pP////f///////////v4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+XPjT/oVFI/8yhnP/x5OP//vz8////////////////////////////////////////////////////////////////9////6T///8i////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///yL///+d////8/////////////////v4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5tEOv+3eHL/48rH//37+/////////////////////////////////////////////////////////////////P///+d////IgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////GP///6T////z//////////////////////v4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+YPjT/qFxT/9y+uv/9+vr////////////////////////////////////////////////////////////////z////pP///xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8R////if////f///////////////////////////v4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsy/6NUS//Yt7P//Pn4////////////////////////////////////////////////////////////////9////4n///8RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wb///9g////5v////////////////////////////////v4+P/KnZj/mUI4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5c8Mv+pXlb/38PA//38/P///////////////////////////////////////////////////////////////+b///9g////BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///yr////C/////f////////////////////////////////38+//dwLz/qF1V/51JP/+bRDv/mD40/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+XPTP/qWBY/+vZ2P///v7///////////////////////////////////////////////////////////3////C////KgAAAAAAAAAAAAAAAAAAAAAAAAAA////B////3z////3///////////////////////////////////////////9+/r/9/Dv/+zc2f/dwLz/x5iT/7BrY/+eS0H/lz0z/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/lzwy/7d6c//06un////////////////////////////////////////////////////////////////3////fP///wcAAAAAAAAAAAAAAAAAAAAA////Nf///93////+//////////////////////////////////////////////////////7+/v/+/v7//fz8//Hm5f/XtLH/s3Fq/5lCOP+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/51JP//Sq6b//Pn5///////////////////////////////////////////////////////////+////3f///zUAAAAAAAAAAAAAAAD///8I////k/////z////////////////////////////////////////////////////////////////////////////////9+/v/8eTj/8aVkP+dRz7/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5c8Mv+vamL/7uDf/////////////////////////////////////////////////////////////////P///5P///8IAAAAAAAAAAD///8u////z/////////////////////////////////////////////////////////////////////////////////////////////////fx8P/ImZP/nUg//5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+ZQTj/0qyo//38/P///////////////////////////////////////////////////////////////8////8uAAAAAP///wT///9g////7//////////////////////////////////////////////////////////////////////////////////////////////////////07Or/xJGL/5hAN/+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/rGRd//Tq6P///////////////////////////////////////////////////////////////+////9g////BP///wz///+U////+v////////////////////////////////////////////////////////////////////////////////////////////////////////7/8+jm/7Nya/+WPDP/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/mkQ7/9m3s////v7///////////////////////////////////////////////////////////r///+U////DP///xr///+7/////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/+HHxP+hUEf/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljwy/7yBe//69/f///////////////////////////////////////////////////////////////+7////Gv///zT////V//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////bu7f+7gHr/mD40/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/6xkXP/u4N/////////////////////////////////////////////////////////////////V////NP///0b////o//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////38/P/XtK//nEY9/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/6BNRP/iycb////////////////////////////////////////////////////////////////o////Rv///1n////6///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////o1NL/pVhQ/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5xGPP/Yt7L//v39///////////////////////////////////////////////////////////6////Wf///2r////8///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////06un/sW1m/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5pDOf/PpKD//Pr5///////////////////////////////////////////////////////////8////av///4D////8/////////////////////////////////////////////////////////////v7//fv7//37+v/9+/r//fv6//37+v/9+/r//fv6//37+v/9+/r//fv6//37+v/06un/snBp/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5lBOP/KnJj/+/j4///////////////////////////////////////////////////////////8////gP///4D////8//////////////////////////////////////////////////////79/f/s3Nr/z6ej/8uemv/Lnpr/y56a/8uemv/Lnpr/y56a/8uemv/Lnpr/y56a/8uemv/GlI//o1VM/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5lBOP/KnJf/+/j4///////////////////////////////////////////////////////////8////gP///2r////8//////////////////////////////////////////////////////z5+f/Nop3/m0Q7/5Y8Mv+WPDL/ljwy/5Y8Mv+WPDL/ljwy/5Y8Mv+WPDL/ljwy/5Y8Mv+WPDL/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5lBOP/KnJf/+/j4///////////////////////////////////////////////////////////8////av///1n////6//////////////////////////////////////////////////////v4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5lCOP/KnZj/+/j4///////////////////////////////////////////////////////////6////Wf///0b////o//////////////////////////////////////////////////////v4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5pDOv/Qp6P//Pr6///////////////////////////////////////////////////////////o////Rv///zT////V//////////////////////////////////////////////////////v4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/51IP//bvbr//v7+///////////////////////////////////////////////////////////V////NP///xr///+7//////////////////////////////////////////////////////v4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/6RVTf/n0c////////////////////////////////////////////////////////////////+7////Gv///wz///+U////+v////////////////////////////////////////////////v4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/7FuZ//z6ej///////////////////////////////////////////////////////////r///+U////DP///wT///9g////7/////////////////////////////////////////////////z4+P/LnZj/mkI5/5Y8Mv+WPDL/ljwy/5Y8Mv+WPDL/ljwy/5Y8Mv+WPDL/ljwy/5Y8Mv+WPDL/ljwy/5Y8Mv+WPDL/ljwy/5Y8Mv+WPDL/mUE3/8mblf/9+/r//////////////////////////////////////////////////////////+////9g////BAAAAAD///8u////z/////////////////////////////////////////////////38/P/iycb/v4iC/7yCfP+8gnz/vIJ8/7yCfP+8gnz/vIJ8/7yCfP+8gnz/vIJ8/7yCfP+8gnz/voR+/8qcl//Lnpr/y56a/8uemv/Lnpr/zqOf//Hl5P///v7//////////////////////////////////////////////////////////8////8uAAAAAAAAAAD///8I////k/////z////////////////////////////////////////////////9/Pz/+vf2//r39v/69/b/+vf2//r39v/69/b/+vf2//j08//07Ov/7+Df/+7f3v/z6+n/+PPy//z6+v/9+/r//fv6//37+v/9+/r//fv7///+/v///////////////////////////////////////////////////////////P///5P///8IAAAAAAAAAAAAAAAA////Nf///93////+/////////////////////////////////////////////////////////////////////////////v7/9u7t/9i3s/++hn//sW1m/7BsZf+7gnv/066q//Ln5v/+/v7////////////////////////////////////////////////////////////////////////////////+////3f///zUAAAAAAAAAAAAAAAAAAAAA////B////3z////3///////////////////////////////////////////////////////////////////////////17Ov/wo6I/55KQf+XPjT/ljsx/5Y7Mf+XPTP/nEY9/7uBe//x5eP////////////////////////////////////////////////////////////////////////////////3////fP///wcAAAAAAAAAAAAAAAAAAAAAAAAAAP///yr////C/////f////////////////////////////////////////////////////////////////37+//UsKz/nUg//5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5tEO//No57/+/j4//////////////////////////////////////////////////////////////////////3////C////KgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wb///9g////5v////////////////////////////////////////////////////////////////bv7/+5fHb/lz0z/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y8Mv+ycGj/8ujm/////////////////////////////////////////////////////////////////////+b///9g////BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8R////if////f//////////////////////////////////////////////////////////+3e3P+qYlr/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+oXVT/6tnX////////////////////////////////////////////////////////////////9////4n///8RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////GP///6T////z/////////////////////////////////////////////////////+vZ1/+oXVT/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+nWlL/6dbU///////////////////////////////////////////////////////////z////pP///xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///yL///+d////8/////////////////////////////////////////////////Hm5f+wa2T/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+uaGD/8OPh//////////////////////////////////////////////////////P///+d////IgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8i////pP////f///////////////////////////////////////////r19P/CjYf/mD81/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5g/Nf/BjIb/+fTz////////////////////////////////////////////////9////6T///8i////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////GP///4n////m/////f////////////////////////////////7+/v/m0M7/qmFZ/5c9M/+WOzH/ljsx/5Y7Mf+WOzH/lz0z/6leV//lz8z//v7+//////////////////////////////////////3////m////if///xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///xH///9g////wv////f////+///////////////////////////8+vr/4snG/7d4cf+iUUj/mUA3/5c+NP+gTkT/tXVu/+DFw//8+fn////////////////////////////////+////9////8L///9g////EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8G////Kv///3z////d/////P///////////////////////////v38//Tr6v/kzcv/2726/9m6t//jysf/8uno//78/P////////////////////////////////z////d////fP///yr///8GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wf///81////k////8/////v////+v////////////////////////////////////////////////////////////////////r////v////z////5P///81////BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////CP///y7///9g////lP///7v////V////6P////r////8/////P////z////8////+v///+j////V////u////5T///9g////Lv///wgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8E////DP///xr///80////Rv///1n///9q////gP///4D///9q////Wf///0b///80////Gv///wz///8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==";
|
|
385
385
|
|
|
386
386
|
// src/lib/cms-version.ts
|
|
387
|
-
var CMS_VERSION = true ? "1.0.
|
|
387
|
+
var CMS_VERSION = true ? "1.0.15" : "0.0.0";
|
|
388
388
|
|
|
389
389
|
// src/components/Admin/Sidebar.tsx
|
|
390
390
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
@@ -6027,6 +6027,8 @@ function OrderDetailPage({ orderId }) {
|
|
|
6027
6027
|
const [order, setOrder] = (0, import_react33.useState)(null);
|
|
6028
6028
|
const [loading, setLoading] = (0, import_react33.useState)(true);
|
|
6029
6029
|
const [error, setError] = (0, import_react33.useState)(null);
|
|
6030
|
+
const [erpEnabled, setErpEnabled] = (0, import_react33.useState)(false);
|
|
6031
|
+
const [reposting, setReposting] = (0, import_react33.useState)(false);
|
|
6030
6032
|
(0, import_react33.useEffect)(() => {
|
|
6031
6033
|
async function load() {
|
|
6032
6034
|
try {
|
|
@@ -6050,6 +6052,39 @@ function OrderDetailPage({ orderId }) {
|
|
|
6050
6052
|
}
|
|
6051
6053
|
load();
|
|
6052
6054
|
}, [orderId]);
|
|
6055
|
+
(0, import_react33.useEffect)(() => {
|
|
6056
|
+
let cancelled = false;
|
|
6057
|
+
(async () => {
|
|
6058
|
+
try {
|
|
6059
|
+
const res = await fetch(`/api/orders/${orderId}/repost-erp`);
|
|
6060
|
+
if (!res.ok) return;
|
|
6061
|
+
const data = await res.json();
|
|
6062
|
+
if (!cancelled) setErpEnabled(data.enabled === true);
|
|
6063
|
+
} catch {
|
|
6064
|
+
}
|
|
6065
|
+
})();
|
|
6066
|
+
return () => {
|
|
6067
|
+
cancelled = true;
|
|
6068
|
+
};
|
|
6069
|
+
}, [orderId]);
|
|
6070
|
+
async function handleRepostToErp() {
|
|
6071
|
+
if (reposting) return;
|
|
6072
|
+
setReposting(true);
|
|
6073
|
+
setError(null);
|
|
6074
|
+
try {
|
|
6075
|
+
const res = await fetch(`/api/orders/${orderId}/repost-erp`, { method: "POST" });
|
|
6076
|
+
if (!res.ok) {
|
|
6077
|
+
const body = await res.json().catch(() => ({}));
|
|
6078
|
+
setError(body.error ?? "Failed to repost to ERP");
|
|
6079
|
+
return;
|
|
6080
|
+
}
|
|
6081
|
+
router.refresh();
|
|
6082
|
+
} catch {
|
|
6083
|
+
setError("Failed to repost to ERP");
|
|
6084
|
+
} finally {
|
|
6085
|
+
setReposting(false);
|
|
6086
|
+
}
|
|
6087
|
+
}
|
|
6053
6088
|
if (loading) {
|
|
6054
6089
|
return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "rounded-lg bg-white p-6 shadow-md", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "flex justify-center py-12", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "text-gray-500", children: "Loading..." }) }) });
|
|
6055
6090
|
}
|
|
@@ -6072,7 +6107,8 @@ function OrderDetailPage({ orderId }) {
|
|
|
6072
6107
|
{
|
|
6073
6108
|
title: `Order ${order.orderNumber}`,
|
|
6074
6109
|
subtitle: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "text-sm text-gray-400", children: formatDateTime(order.createdAt) }),
|
|
6075
|
-
closeHref: "/admin/orders"
|
|
6110
|
+
closeHref: "/admin/orders",
|
|
6111
|
+
menuItems: erpEnabled ? [{ label: reposting ? "Reposting..." : "Repost to ERP", onClick: handleRepostToErp }] : void 0
|
|
6076
6112
|
}
|
|
6077
6113
|
),
|
|
6078
6114
|
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
|
|
@@ -9681,6 +9717,8 @@ function ProductEditPage({ productId }) {
|
|
|
9681
9717
|
const [productSlug, setProductSlug] = (0, import_react43.useState)("");
|
|
9682
9718
|
const [sku, setSku] = (0, import_react43.useState)("");
|
|
9683
9719
|
const [hsn, setHsn] = (0, import_react43.useState)("");
|
|
9720
|
+
const [uom, setUom] = (0, import_react43.useState)("");
|
|
9721
|
+
const [productType, setProductType] = (0, import_react43.useState)("product");
|
|
9684
9722
|
const [collectionId, setCollectionId] = (0, import_react43.useState)(null);
|
|
9685
9723
|
const [brandId, setBrandId] = (0, import_react43.useState)(null);
|
|
9686
9724
|
const [categoryId, setCategoryId] = (0, import_react43.useState)(null);
|
|
@@ -9694,6 +9732,8 @@ function ProductEditPage({ productId }) {
|
|
|
9694
9732
|
const [specifications, setSpecifications] = (0, import_react43.useState)([{ key: "", value: "" }]);
|
|
9695
9733
|
const [otherMetadata, setOtherMetadata] = (0, import_react43.useState)({});
|
|
9696
9734
|
const [facetRows, setFacetRows] = (0, import_react43.useState)([{ name: "", value: "" }]);
|
|
9735
|
+
const [taxMasterList, setTaxMasterList] = (0, import_react43.useState)([]);
|
|
9736
|
+
const [taxRows, setTaxRows] = (0, import_react43.useState)([{ taxId: "", rate: "" }]);
|
|
9697
9737
|
const [seoId, setSeoId] = (0, import_react43.useState)(null);
|
|
9698
9738
|
const [seo, setSeo] = (0, import_react43.useState)({
|
|
9699
9739
|
seoTitle: "",
|
|
@@ -9707,11 +9747,12 @@ function ProductEditPage({ productId }) {
|
|
|
9707
9747
|
let cancelled = false;
|
|
9708
9748
|
(async () => {
|
|
9709
9749
|
try {
|
|
9710
|
-
const [colRes, brandRes, catRes, attrRes] = await Promise.all([
|
|
9750
|
+
const [colRes, brandRes, catRes, attrRes, taxesRes] = await Promise.all([
|
|
9711
9751
|
fetch("/api/collections?limit=500"),
|
|
9712
9752
|
fetch("/api/brands?limit=500"),
|
|
9713
9753
|
fetch("/api/product_categories?limit=500"),
|
|
9714
|
-
fetch("/api/attributes?limit=500")
|
|
9754
|
+
fetch("/api/attributes?limit=500"),
|
|
9755
|
+
fetch("/api/taxes?limit=200&sortField=name&sortOrder=asc")
|
|
9715
9756
|
]);
|
|
9716
9757
|
let attrList = [];
|
|
9717
9758
|
if (!cancelled && colRes.ok) {
|
|
@@ -9730,6 +9771,13 @@ function ProductEditPage({ productId }) {
|
|
|
9730
9771
|
const d = await attrRes.json();
|
|
9731
9772
|
if (Array.isArray(d.data)) attrList = d.data;
|
|
9732
9773
|
}
|
|
9774
|
+
if (!cancelled && taxesRes.ok) {
|
|
9775
|
+
const d = await taxesRes.json();
|
|
9776
|
+
const raw = Array.isArray(d.data) ? d.data : [];
|
|
9777
|
+
setTaxMasterList(
|
|
9778
|
+
raw.filter((t) => t.active !== false && t.deleted !== true)
|
|
9779
|
+
);
|
|
9780
|
+
}
|
|
9733
9781
|
if (create) {
|
|
9734
9782
|
if (!cancelled) {
|
|
9735
9783
|
setProductSlug("");
|
|
@@ -9745,6 +9793,8 @@ function ProductEditPage({ productId }) {
|
|
|
9745
9793
|
setProductSlug(typeof product.slug === "string" ? product.slug : "");
|
|
9746
9794
|
setSku(product.sku ?? "");
|
|
9747
9795
|
setHsn(product.hsn ?? "");
|
|
9796
|
+
setUom(product.uom != null ? String(product.uom) : "");
|
|
9797
|
+
setProductType(product.type === "service" ? "service" : "product");
|
|
9748
9798
|
setCollectionId(product.collectionId ?? null);
|
|
9749
9799
|
setBrandId(product.brandId ?? null);
|
|
9750
9800
|
setCategoryId(product.categoryId ?? null);
|
|
@@ -9775,6 +9825,19 @@ function ProductEditPage({ productId }) {
|
|
|
9775
9825
|
const seoData = await fetchSeo(product.seoId);
|
|
9776
9826
|
if (!cancelled) setSeo(seoData);
|
|
9777
9827
|
}
|
|
9828
|
+
const ptRes = await fetch(`/api/product_taxes?productId=${productId}&limit=100`);
|
|
9829
|
+
if (ptRes.ok && !cancelled) {
|
|
9830
|
+
const ptData = await ptRes.json();
|
|
9831
|
+
const pts = Array.isArray(ptData.data) ? ptData.data : [];
|
|
9832
|
+
if (pts.length > 0) {
|
|
9833
|
+
setTaxRows(
|
|
9834
|
+
pts.map((p) => ({
|
|
9835
|
+
taxId: p.taxId,
|
|
9836
|
+
rate: p.rate != null && p.rate !== "" ? String(p.rate) : ""
|
|
9837
|
+
}))
|
|
9838
|
+
);
|
|
9839
|
+
} else if (!cancelled) setTaxRows([{ taxId: "", rate: "" }]);
|
|
9840
|
+
}
|
|
9778
9841
|
const paRes = await fetch(`/api/product_attributes?productId=${productId}&limit=100`);
|
|
9779
9842
|
if (paRes.ok && !cancelled) {
|
|
9780
9843
|
const paData = await paRes.json();
|
|
@@ -9823,6 +9886,8 @@ function ProductEditPage({ productId }) {
|
|
|
9823
9886
|
name: name.trim(),
|
|
9824
9887
|
sku: sku.trim() || null,
|
|
9825
9888
|
hsn: hsn.trim() || null,
|
|
9889
|
+
uom: uom.trim() || null,
|
|
9890
|
+
type: productType,
|
|
9826
9891
|
collectionId: collectionId || null,
|
|
9827
9892
|
brandId: brandId || null,
|
|
9828
9893
|
categoryId: categoryId || null,
|
|
@@ -9919,6 +9984,55 @@ function ProductEditPage({ productId }) {
|
|
|
9919
9984
|
});
|
|
9920
9985
|
}
|
|
9921
9986
|
}
|
|
9987
|
+
const parseTaxRate = (s) => {
|
|
9988
|
+
const t = s.trim();
|
|
9989
|
+
if (!t) return null;
|
|
9990
|
+
const n = Number(t);
|
|
9991
|
+
return Number.isFinite(n) ? n : null;
|
|
9992
|
+
};
|
|
9993
|
+
const ratesDiffer = (a, b) => {
|
|
9994
|
+
if (a == null && b == null) return false;
|
|
9995
|
+
if (a == null || b == null) return true;
|
|
9996
|
+
return Math.abs(a - b) > 1e-6;
|
|
9997
|
+
};
|
|
9998
|
+
const wantedTax = /* @__PURE__ */ new Map();
|
|
9999
|
+
for (const row of taxRows) {
|
|
10000
|
+
if (row.taxId === "") continue;
|
|
10001
|
+
wantedTax.set(row.taxId, parseTaxRate(row.rate));
|
|
10002
|
+
}
|
|
10003
|
+
const ptListRes = await fetch(`/api/product_taxes?productId=${savedId}&limit=200`);
|
|
10004
|
+
const ptListData = ptListRes.ok ? await ptListRes.json() : { data: [] };
|
|
10005
|
+
const existingPt = Array.isArray(ptListData.data) ? ptListData.data : [];
|
|
10006
|
+
for (const ep of existingPt) {
|
|
10007
|
+
if (!wantedTax.has(ep.taxId)) {
|
|
10008
|
+
await fetch(`/api/product_taxes/${ep.id}`, { method: "DELETE" });
|
|
10009
|
+
}
|
|
10010
|
+
}
|
|
10011
|
+
const survivors = existingPt.filter((ep) => wantedTax.has(ep.taxId));
|
|
10012
|
+
for (const [taxId, rate] of wantedTax) {
|
|
10013
|
+
const ep = survivors.find((e) => e.taxId === taxId);
|
|
10014
|
+
if (!ep) {
|
|
10015
|
+
await fetch("/api/product_taxes", {
|
|
10016
|
+
method: "POST",
|
|
10017
|
+
headers: { "Content-Type": "application/json" },
|
|
10018
|
+
body: JSON.stringify({
|
|
10019
|
+
productId: Number(savedId),
|
|
10020
|
+
taxId,
|
|
10021
|
+
rate
|
|
10022
|
+
})
|
|
10023
|
+
});
|
|
10024
|
+
} else {
|
|
10025
|
+
const existingRate = ep.rate == null || String(ep.rate).trim() === "" ? null : Number(ep.rate);
|
|
10026
|
+
const er = Number.isFinite(existingRate) ? existingRate : null;
|
|
10027
|
+
if (ratesDiffer(er, rate)) {
|
|
10028
|
+
await fetch(`/api/product_taxes/${ep.id}`, {
|
|
10029
|
+
method: "PUT",
|
|
10030
|
+
headers: { "Content-Type": "application/json" },
|
|
10031
|
+
body: JSON.stringify({ rate })
|
|
10032
|
+
});
|
|
10033
|
+
}
|
|
10034
|
+
}
|
|
10035
|
+
}
|
|
9922
10036
|
router.push("/admin/products");
|
|
9923
10037
|
} catch {
|
|
9924
10038
|
setErrors(["Failed to save"]);
|
|
@@ -9936,6 +10050,18 @@ function ProductEditPage({ productId }) {
|
|
|
9936
10050
|
const addFacet = () => setFacetRows((prev) => [...prev, { name: "", value: "" }]);
|
|
9937
10051
|
const removeFacet = (i) => setFacetRows((prev) => prev.length <= 1 ? prev : prev.filter((_, j) => j !== i));
|
|
9938
10052
|
const setFacet = (i, field, value) => setFacetRows((prev) => prev.map((row, j) => j === i ? { ...row, [field]: value } : row));
|
|
10053
|
+
const addTaxRow = () => setTaxRows((prev) => [...prev, { taxId: "", rate: "" }]);
|
|
10054
|
+
const removeTaxRow = (i) => setTaxRows((prev) => prev.length <= 1 ? prev : prev.filter((_, j) => j !== i));
|
|
10055
|
+
const setTaxRow = (i, patch) => setTaxRows((prev) => prev.map((row, j) => j === i ? { ...row, ...patch } : row));
|
|
10056
|
+
const taxesForSelect = (rowIndex) => {
|
|
10057
|
+
const row = taxRows[rowIndex];
|
|
10058
|
+
const selectedElsewhere = new Set(
|
|
10059
|
+
taxRows.map((r, j) => j !== rowIndex && r.taxId !== "" ? r.taxId : null).filter((x) => x != null)
|
|
10060
|
+
);
|
|
10061
|
+
return taxMasterList.filter(
|
|
10062
|
+
(t) => !selectedElsewhere.has(t.id) || row && row.taxId !== "" && t.id === row.taxId
|
|
10063
|
+
);
|
|
10064
|
+
};
|
|
9939
10065
|
if (loading) {
|
|
9940
10066
|
return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "flex items-center justify-center py-12", children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "text-gray-500", children: "Loading..." }) });
|
|
9941
10067
|
}
|
|
@@ -9980,6 +10106,36 @@ function ProductEditPage({ productId }) {
|
|
|
9980
10106
|
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("input", { type: "text", value: hsn, onChange: (e) => setHsn(e.target.value), className: inputCls })
|
|
9981
10107
|
] })
|
|
9982
10108
|
] }),
|
|
10109
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
10110
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { children: [
|
|
10111
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("label", { className: labelCls, children: "UOM" }),
|
|
10112
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
10113
|
+
"input",
|
|
10114
|
+
{
|
|
10115
|
+
type: "text",
|
|
10116
|
+
value: uom,
|
|
10117
|
+
onChange: (e) => setUom(e.target.value),
|
|
10118
|
+
className: inputCls,
|
|
10119
|
+
placeholder: "e.g. pcs, kg, hrs"
|
|
10120
|
+
}
|
|
10121
|
+
)
|
|
10122
|
+
] }),
|
|
10123
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { children: [
|
|
10124
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("label", { className: labelCls, children: "Product type" }),
|
|
10125
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
|
|
10126
|
+
"select",
|
|
10127
|
+
{
|
|
10128
|
+
value: productType,
|
|
10129
|
+
onChange: (e) => setProductType(e.target.value === "service" ? "service" : "product"),
|
|
10130
|
+
className: inputCls,
|
|
10131
|
+
children: [
|
|
10132
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("option", { value: "product", children: "Product" }),
|
|
10133
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("option", { value: "service", children: "Service" })
|
|
10134
|
+
]
|
|
10135
|
+
}
|
|
10136
|
+
)
|
|
10137
|
+
] })
|
|
10138
|
+
] }),
|
|
9983
10139
|
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
9984
10140
|
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { children: [
|
|
9985
10141
|
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("label", { className: labelCls, children: "Brand" }),
|
|
@@ -10030,6 +10186,78 @@ function ProductEditPage({ productId }) {
|
|
|
10030
10186
|
] })
|
|
10031
10187
|
] })
|
|
10032
10188
|
] }),
|
|
10189
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("section", { children: [
|
|
10190
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("h2", { className: "text-xs font-semibold text-gray-400 uppercase tracking-wider mb-2", children: "Taxes" }),
|
|
10191
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "text-xs text-gray-500 mb-2", children: "Link taxes for this product. Leave rate empty to use the tax's default rate; set a value to override." }),
|
|
10192
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: `${sectionCls} space-y-2`, children: [
|
|
10193
|
+
taxRows.map((row, i) => {
|
|
10194
|
+
const options = taxesForSelect(i);
|
|
10195
|
+
const master = row.taxId !== "" ? taxMasterList.find((t) => t.id === row.taxId) : void 0;
|
|
10196
|
+
const defaultRateHint = master != null ? `Default: ${String(master.rate)}%` : void 0;
|
|
10197
|
+
return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "flex flex-wrap gap-2 items-end", children: [
|
|
10198
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "min-w-[160px] flex-1", children: [
|
|
10199
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("label", { className: labelCls, children: "Tax" }),
|
|
10200
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
|
|
10201
|
+
"select",
|
|
10202
|
+
{
|
|
10203
|
+
value: row.taxId === "" ? "" : String(row.taxId),
|
|
10204
|
+
onChange: (e) => {
|
|
10205
|
+
const v = e.target.value;
|
|
10206
|
+
setTaxRow(i, { taxId: v === "" ? "" : Number(v) });
|
|
10207
|
+
},
|
|
10208
|
+
className: inputCls,
|
|
10209
|
+
children: [
|
|
10210
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("option", { value: "", children: "\u2014" }),
|
|
10211
|
+
options.map((t) => /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("option", { value: t.id, children: [
|
|
10212
|
+
t.name,
|
|
10213
|
+
" (",
|
|
10214
|
+
String(t.rate),
|
|
10215
|
+
"%)"
|
|
10216
|
+
] }, t.id))
|
|
10217
|
+
]
|
|
10218
|
+
}
|
|
10219
|
+
)
|
|
10220
|
+
] }),
|
|
10221
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "w-28", children: [
|
|
10222
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("label", { className: labelCls, children: "Rate %" }),
|
|
10223
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
10224
|
+
"input",
|
|
10225
|
+
{
|
|
10226
|
+
type: "text",
|
|
10227
|
+
inputMode: "decimal",
|
|
10228
|
+
value: row.rate,
|
|
10229
|
+
onChange: (e) => setTaxRow(i, { rate: e.target.value }),
|
|
10230
|
+
className: inputCls,
|
|
10231
|
+
placeholder: defaultRateHint ?? "optional",
|
|
10232
|
+
title: defaultRateHint
|
|
10233
|
+
}
|
|
10234
|
+
)
|
|
10235
|
+
] }),
|
|
10236
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
10237
|
+
"button",
|
|
10238
|
+
{
|
|
10239
|
+
type: "button",
|
|
10240
|
+
onClick: () => removeTaxRow(i),
|
|
10241
|
+
className: "p-2 text-gray-400 hover:text-red-600 rounded shrink-0 mb-0.5",
|
|
10242
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_lucide_react34.Trash2, { className: "h-4 w-4" })
|
|
10243
|
+
}
|
|
10244
|
+
)
|
|
10245
|
+
] }, i);
|
|
10246
|
+
}),
|
|
10247
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
|
|
10248
|
+
"button",
|
|
10249
|
+
{
|
|
10250
|
+
type: "button",
|
|
10251
|
+
onClick: addTaxRow,
|
|
10252
|
+
className: "inline-flex items-center gap-1 rounded border border-gray-300 bg-white px-2 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50",
|
|
10253
|
+
children: [
|
|
10254
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_lucide_react34.Plus, { className: "h-3.5 w-3.5" }),
|
|
10255
|
+
" Add tax"
|
|
10256
|
+
]
|
|
10257
|
+
}
|
|
10258
|
+
)
|
|
10259
|
+
] })
|
|
10260
|
+
] }),
|
|
10033
10261
|
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("section", { children: [
|
|
10034
10262
|
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("h2", { className: "text-xs font-semibold text-gray-400 uppercase tracking-wider mb-2", children: "Attributes (facets)" }),
|
|
10035
10263
|
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "text-xs text-gray-500 mb-2", children: "Search existing attributes or create new ones (like blog categories). Value on the right." }),
|