@tachybase/plugin-audit-logs 0.23.22 → 0.23.35

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.
@@ -92,6 +92,23 @@ export declare const useAuditLogsCollection: () => {
92
92
  'x-read-pretty': boolean;
93
93
  enum?: undefined;
94
94
  };
95
+ } | {
96
+ name: string;
97
+ type: string;
98
+ interface: string;
99
+ uiSchema: {
100
+ type: string;
101
+ title: string;
102
+ 'x-component': string;
103
+ 'x-component-props'?: undefined;
104
+ 'x-read-pretty'?: undefined;
105
+ enum?: undefined;
106
+ };
107
+ collectionName?: undefined;
108
+ target?: undefined;
109
+ targetKey?: undefined;
110
+ sourceKey?: undefined;
111
+ foreignKey?: undefined;
95
112
  } | {
96
113
  name: string;
97
114
  collectionName: string;
@@ -1 +1 @@
1
- (function(a,e){typeof exports=="object"&&typeof module!="undefined"?e(exports,require("@tachybase/client"),require("react/jsx-runtime"),require("@ant-design/icons"),require("react-i18next"),require("@tachybase/schema"),require("@tachybase/utils/client"),require("react"),require("@tachybase/components")):typeof define=="function"&&define.amd?define(["exports","@tachybase/client","react/jsx-runtime","@ant-design/icons","react-i18next","@tachybase/schema","@tachybase/utils/client","react","@tachybase/components"],e):(a=typeof globalThis!="undefined"?globalThis:a||self,e(a["@tachybase/plugin-audit-logs"]={},a["@tachybase/client"],a.jsxRuntime,a["@ant-design/icons"],a["react-i18next"],a["@tachybase/schema"],a["@tachybase/utils"],a.react,a["@tachybase/components"]))})(this,function(a,e,i,d,T,s,v,b,y){"use strict";var ne=Object.defineProperty,ae=Object.defineProperties;var le=Object.getOwnPropertyDescriptors;var F=Object.getOwnPropertySymbols;var N=Object.prototype.hasOwnProperty,j=Object.prototype.propertyIsEnumerable;var D=(a,e,i)=>e in a?ne(a,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):a[e]=i,m=(a,e)=>{for(var i in e||(e={}))N.call(e,i)&&D(a,i,e[i]);if(F)for(var i of F(e))j.call(e,i)&&D(a,i,e[i]);return a},x=(a,e)=>ae(a,le(e));var q=(a,e)=>{var i={};for(var d in a)N.call(a,d)&&e.indexOf(d)<0&&(i[d]=a[d]);if(a!=null&&F)for(var d of F(a))e.indexOf(d)<0&&j.call(a,d)&&(i[d]=a[d]);return i};var E=(a,e,i)=>new Promise((d,T)=>{var s=y=>{try{b(i.next(y))}catch(h){T(h)}},v=y=>{try{b(i.throw(y))}catch(h){T(h)}},b=y=>y.done?d(y.value):Promise.resolve(y.value).then(s,v);b((i=i.apply(a,e)).next())});const h="@tachybase/plugin-audit-logs";function C(){return T.useTranslation(h)}const t=o=>e.tval(o,{ns:h}),P=()=>{const{insert:o}=e.useSchemaInitializer(),{t:r}=C(),l=e.useSchemaInitializerItem(),n=e.createTableBlockSchema({collection:"auditLogs",rowKey:"id",tableActionInitializers:"auditLogsTable:configureActions",tableColumnInitializers:"auditLogsTable:configureColumns",tableActionColumnInitializers:"auditLogsTable:configureItemActions",tableBlockProvider:"AuditLogsBlockProvider",disableTemplate:!0});return i.jsx(e.SchemaInitializerItem,m({icon:i.jsx(d.TableOutlined,{}),onClick:()=>{o(n)},title:r("Audit Logs")},l))},O=()=>({name:"auditLogs",title:t("Audit logs"),fields:[{name:"createdAt",type:"date",interface:"createdAt",uiSchema:{type:"datetime",title:t("Created at"),"x-component":"DatePicker","x-component-props":{showTime:!0,ellipsis:!0},"x-read-pretty":!0}},{name:"type",type:"string",interface:"select",uiSchema:{type:"string",title:t("Action type"),"x-component":"Select","x-component-props":{ellipsis:!0},"x-read-pretty":!0,enum:[{label:t("Create record"),value:"create",color:"lime"},{label:t("Update record"),value:"update",color:"gold"},{label:t("Delete record"),value:"destroy",color:"magenta"}]}},{name:"recordId",type:"string",interface:"input",uiSchema:{title:t("Record ID"),type:"string","x-component":"Input","x-component-props":{ellipsis:!0}}},{collectionName:"auditLogs",name:"collection",type:"belongsTo",interface:"m2o",target:"collections",targetKey:"name",sourceKey:"id",foreignKey:"collectionName",uiSchema:{type:"object",title:t("Collection"),"x-component":"AssociationField","x-component-props":{fieldNames:{value:"name",label:"title"},ellipsis:!0},"x-read-pretty":!0}},{name:"user",collectionName:"auditLogs",type:"belongsTo",interface:"createdBy",targetKey:"id",foreignKey:"createdById",target:"users",uiSchema:{type:"object",title:t("User"),"x-component":"AssociationField","x-component-props":{fieldNames:{value:"id",label:"nickname"},ellipsis:!0},"x-read-pretty":!0}},{name:"changes",collectionName:"auditLogs",type:"hasMany",interface:"subTable",target:"auditChanges",foreignKey:"auditLogId",targetKey:"id",uiSchema:{type:"object",title:t("Details of changes")}}]}),K=()=>({name:"auditChanges",title:t("Audit Changes"),fields:[{name:"field",type:"json",interface:"input",uiSchema:{title:t("Field"),"x-component":"AuditLogsField"}},{type:"json",name:"before",interface:"input",uiSchema:{title:t("Before change"),"x-component":"AuditLogsValue"}},{type:"json",name:"after",interface:"input",uiSchema:{title:t("After change"),"x-component":"AuditLogsValue"}}]}),M=()=>({name:"collections",title:t("Collections"),fields:[{name:"name",type:"string",interface:"input",uiSchema:{title:t("Collection name"),type:"string","x-component":"Input","x-component-props":{ellipsis:!0}}},{name:"title",type:"string",interface:"input",uiSchema:{title:t("Collection display name"),type:"string","x-component":"Input","x-component-props":{ellipsis:!0}}}]}),U=l=>{var n=l,{children:o}=n,r=q(n,["children"]);const p=K(),c=O(),u=M();return i.jsx(e.ExtendCollectionsProvider,{collections:[c,p,u],children:i.jsx(e.TableBlockProvider,x(m({name:"audit-logs"},r),{children:o}))})},W=s.observer(()=>{var l,n,p,c;const o=s.useField(),r=e.useCompile();return o.value?i.jsx(e.EllipsisWithTooltip,{ellipsis:!0,children:(n=(l=o.value)==null?void 0:l.uiSchema)!=null&&n.title?r((c=(p=o.value)==null?void 0:p.uiSchema)==null?void 0:c.title):o.value.name}):null},{displayName:"AuditLogsField"}),_=s.observer(()=>{var l,n;const o=s.useField(),r=e.useRecord();return(l=r.field)!=null&&l.uiSchema?i.jsx(e.FormProvider,{children:i.jsx(e.SchemaComponent,{schema:x(m({name:r.field.name},(n=r.field)==null?void 0:n.uiSchema),{default:o.value,"x-read-pretty":!0})})}):i.jsx(e.EllipsisWithTooltip,{ellipsis:!0,children:o.value?JSON.stringify(o.value):null})},{displayName:"AuditLogsValue"}),J=()=>{const o={type:"string","x-component":"AssociationField","x-decorator":"FormItem","x-collection-field":"auditLogs.changes","x-read-pretty":!0,"x-component-props":{multiple:!0,fieldNames:{value:"id",label:"id"},mode:"SubTable"},properties:{block:{type:"void","x-component":"AssociationField.SubTable",properties:{[v.uid()]:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{field:{"x-collection-field":"auditChanges.field","x-component":"CollectionField","x-read-pretty":!0,"x-component-props":{ellipsis:!0}}}},[v.uid()]:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{before:{"x-collection-field":"auditChanges.before","x-component":"CollectionField","x-read-pretty":!0,"x-component-props":{ellipsis:!0}}}},[v.uid()]:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{after:{"x-collection-field":"auditChanges.after","x-component":"CollectionField","x-read-pretty":!0,"x-component-props":{ellipsis:!0}}}}}}}},r={type:"void",title:t("View"),"x-action":"view","x-toolbar":"ActionSchemaToolbar","x-settings":"actionSettings:view","x-component":"Action","x-component-props":{openMode:"drawer"},properties:{drawer:{type:"void",title:t("View record"),"x-component":"Action.Container","x-component-props":{className:"tb-action-popup"},properties:{tabs:{type:"void","x-component":"Tabs","x-component-props":{},properties:{tab1:{type:"void",title:t("Details"),"x-component":"Tabs.TabPane","x-designer":"Tabs.Designer","x-component-props":{},properties:{grid:{type:"void","x-component":"Grid",properties:{"7ypqrxaqysp":{type:"void","x-component":"Grid.Row",properties:{"1fc2l8dwe7m":{type:"void","x-component":"Grid.Col",properties:{"5ley6xifrsb":{type:"void","x-acl-action":"auditLogs:get","x-decorator":"FormBlockProvider","x-decorator-props":{resource:"auditLogs",collection:"auditLogs",readPretty:!0,action:"get",params:{appends:["collection","user","changes"]},useParams:"{{ useParamsFromRecord }}",useSourceId:"{{ useSourceIdFromParentRecord }}"},"x-component":"CardItem",properties:{bv710pbf9w6:{type:"void","x-component":"FormV2","x-read-pretty":!0,"x-component-props":{useProps:"{{ useFormBlockProps }}"},properties:{grid:{type:"void","x-component":"Grid",properties:{g4c24abnbd9:{type:"void","x-component":"Grid.Row",properties:{fkt9dj5lu1k:{type:"void","x-component":"Grid.Col",properties:{createdAt:{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"auditLogs.createdAt","x-component-props":{},"x-read-pretty":!0}}}}},l267bkv423v:{type:"void","x-component":"Grid.Row",properties:{tehaepm5xqy:{type:"void","x-component":"Grid.Col",properties:{type:{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"auditLogs.type","x-component-props":{},"x-read-pretty":!0}}}}},zhmn2tkzdh2:{type:"void","x-component":"Grid.Row",properties:{yuwyej17i64:{type:"void","x-component":"Grid.Col",properties:{recordId:{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"auditLogs.recordId","x-component-props":{}}}}}},"6q933ic06mj":{type:"void","x-component":"Grid.Row",properties:{nwtbkqd99zl2:{type:"void","x-component":"Grid.Col",properties:{"collection.title":{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"auditLogs.collection.title","x-component-props":{}}}},nwtbkqd99zl1:{type:"void","x-component":"Grid.Col",properties:{"collection.name":{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"auditLogs.collection.name","x-component-props":{}}}}}},xd4kzulndqk:{type:"void","x-component":"Grid.Row",properties:{k3sd72n83zd:{type:"void","x-component":"Grid.Col",properties:{user:{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"auditLogs.user","x-component-props":{},"x-read-pretty":!0,properties:{viewer:{type:"void",title:t("View record"),"x-component":"RecordPicker.Viewer","x-component-props":{className:"tb-action-popup"},properties:{tabs:{type:"void","x-component":"Tabs","x-component-props":{},"x-initializer":"TabPaneInitializers",properties:{tab1:{type:"void",title:t("Details"),"x-component":"Tabs.TabPane","x-designer":"Tabs.Designer","x-component-props":{},properties:{grid:{type:"void","x-component":"Grid","x-initializer":"popup:common:addBlock"}}}}}}}}}}}}},"3lghgclbtcg":{type:"void","x-component":"Grid.Row",properties:{"8l1v1auwlx0":{type:"void","x-component":"Grid.Col",properties:{changes:o}}}}}}}}}}}}}}}}}}}}}}}};return i.jsx(e.ActionInitializer,{schema:r})},R=()=>{var f,V,G,B;const{name:o,title:r}=e.useCollection_deprecated(),l=s.useField(),n=s.useFieldSchema(),{form:p}=e.useFormBlockContext(),{service:c}=e.useTableBlockContext(),{t:u}=C(),{dn:S}=e.useDesignable();return i.jsxs(e.GeneralSchemaDesigner,{title:r||o,children:[i.jsx(e.SchemaSettingsDataScope,{collectionName:o,defaultFilter:((V=(f=n==null?void 0:n["x-decorator-props"])==null?void 0:f.params)==null?void 0:V.filter)||{},form:p,onSubmit:({filter:A})=>{var I;const g=l.decoratorProps.params||{};g.filter=A,l.decoratorProps.params=g,n["x-decorator-props"].params=g,c.run(x(m({},(I=c.params)==null?void 0:I[0]),{filter:A,page:1})),S.emit("patch",{schema:{"x-uid":n["x-uid"],"x-decorator-props":n["x-decorator-props"]}})}}),i.jsx(e.SchemaSettingsSelectItem,{title:u("Records per page"),value:((B=(G=l.decoratorProps)==null?void 0:G.params)==null?void 0:B.pageSize)||20,options:[{label:"10",value:10},{label:"20",value:20},{label:"50",value:50},{label:"100",value:100},{label:"200",value:200}],onChange:A=>{var I;const g=l.decoratorProps.params||{};g.pageSize=A,l.decoratorProps.params=g,n["x-decorator-props"].params=g,c.run(x(m({},(I=c.params)==null?void 0:I[0]),{pageSize:A,page:1})),S.emit("patch",{schema:{"x-uid":n["x-uid"],"x-decorator-props":n["x-decorator-props"]}})}}),i.jsx(e.SchemaSettingsDivider,{}),i.jsx(e.SchemaSettingsRemove,{removeParentsIfNoChildren:!0,breakRemoveOn:{"x-component":"Grid"}})]})},$={name:"auditLogs",title:t("Audit logs"),fields:[{name:"createdAt",type:"date",interface:"createdAt",uiSchema:{type:"datetime",title:t("Created at"),"x-component":"DatePicker","x-component-props":{showTime:!0},"x-read-pretty":!0}},{name:"type",type:"string",interface:"select",uiSchema:{type:"string",title:t("Action type"),"x-component":"Select","x-read-pretty":!0,enum:[{label:t("Create record"),value:"create",color:"lime"},{label:t("Update record"),value:"update",color:"gold"},{label:t("Delete record"),value:"destroy",color:"magenta"}]}}]},H=s.observer(()=>{var r,l;const o=s.useField();return i.jsx("div",{children:((r=o==null?void 0:o.value)==null?void 0:r.nickname)||((l=o.value)==null?void 0:l.id)})},{displayName:"Username"}),Q=s.observer(()=>{const o=s.useField(),{title:r,name:l}=o.value||{},n=e.useCompile();return i.jsx("div",{children:r?n(r):l})},{displayName:"Collection"}),X=s.observer(()=>{var l,n,p,c;const o=s.useField(),r=e.useCompile();return o.value?i.jsx("div",{children:(n=(l=o.value)==null?void 0:l.uiSchema)!=null&&n.title?r((c=(p=o.value)==null?void 0:p.uiSchema)==null?void 0:c.title):o.value.name}):null},{displayName:"Field"}),Y=s.observer(()=>{var l,n;const o=s.useField(),r=y.ArrayTable.useRecord();return(l=r.field)!=null&&l.uiSchema?i.jsx(e.FormProvider,{children:i.jsx(e.SchemaComponent,{schema:x(m({name:r.field.name},(n=r.field)==null?void 0:n.uiSchema),{default:o.value,"x-read-pretty":!0})})}):i.jsx("div",{children:o.value?JSON.stringify(o.value):null})},{displayName:"Value"}),L=b.createContext(null);L.displayName="IsAssociationBlock";const w=()=>{const o=b.useContext(L),r={};return o||(r.column31={type:"void","x-component":"TableV2.Column",title:t("Record ID"),properties:{recordId:{"x-component":"Input","x-read-pretty":!0}}}),i.jsx(e.SchemaComponent,{memoized:!0,components:{ArrayTable:y.ArrayTable,Username:H,Collection:Q,Field:X,Value:Y},schema:{type:"void",name:"lfm4trkw8j3","x-component":"div",properties:{actions:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:16}},properties:{filter:{type:"void",title:t("Filter"),"x-action":"filter","x-component":"Filter.Action","x-component-props":{icon:"FilterOutlined",useProps:"{{ useFilterActionProps }}"},"x-align":"left"}}},y84dlntcaup:{type:"array","x-component":"TableV2","x-component-props":{rowKey:"id",rowSelection:{type:"checkbox"},useProps:"{{ useTableBlockProps }}"},properties:x(m({actions:{type:"void",title:t("Actions"),"x-action-column":"actions","x-decorator":"TableV2.Column.ActionBar","x-component":"TableV2.Column","x-designer":"TableV2.ActionColumnDesigner","x-initializer":"table:configureItemActions",properties:{actions:{type:"void","x-decorator":"DndContext","x-component":"Space","x-component-props":{split:"|"},properties:{o80rypwmeeg:{type:"void",title:t("View"),"x-toolbar":"ActionSchemaToolbar","x-settings":"actionSettings:view","x-component":"Action.Link","x-component-props":{openMode:"drawer"},properties:{drawer:{type:"void",title:t("View record"),"x-component":"Action.Container","x-component-props":{className:"tb-action-popup"},properties:{grid:{type:"void","x-component":"Grid",properties:{tdlav8o9o17:{type:"void","x-component":"Grid.Row",properties:{"7bsnaf47i6g":{type:"void","x-component":"Grid.Col",properties:{"6s2qbihe3tu":{type:"void","x-acl-action":"auditLogs:get","x-decorator":"FormBlockProvider","x-decorator-props":{resource:"auditLogs",collection:"auditLogs",readPretty:!0,action:"get",params:{appends:["collection","user","changes"]},useParams:"{{ useParamsFromRecord }}",useSourceId:"{{ useSourceIdFromParentRecord }}"},"x-component":"CardItem",properties:{mevpuonrda0:{type:"void","x-component":"FormV2","x-read-pretty":!0,"x-component-props":{useProps:"{{ useFormBlockProps }}"},properties:{grid:{type:"void","x-component":"Grid",properties:{row1:{type:"void","x-component":"Grid.Row",properties:{col11:{type:"void","x-component":"Grid.Col",properties:{collection:{type:"string",title:t("Collection display name"),"x-component":"Collection","x-decorator":"FormItem","x-read-pretty":!0}}}}},row2:{type:"void","x-component":"Grid.Row",properties:{col21:{type:"void","x-component":"Grid.Col",properties:{type:{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-read-pretty":!0}}}}},row3:{type:"void","x-component":"Grid.Row",properties:{col31:{type:"void","x-component":"Grid.Col",properties:{createdAt:{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-read-pretty":!0}}}}},row4:{type:"void","x-component":"Grid.Row",properties:{col41:{type:"void","x-component":"Grid.Col",properties:{user:{type:"string",title:t("User"),"x-component":"Username","x-decorator":"FormItem","x-read-pretty":!0}}}}},row5:{type:"void","x-component":"Grid.Row",properties:{col51:{type:"void","x-component":"Grid.Col",properties:{changes:{type:"array",title:t("Field value changes"),"x-decorator":"FormItem","x-component":"ArrayTable","x-component-props":{pagination:{pageSize:10},scroll:{x:"100%"}},items:{type:"object",properties:{column3:{type:"void","x-component":"ArrayTable.Column","x-component-props":{width:200,title:t("Field")},properties:{field:{type:"string","x-component":"Field"}}},column4:{type:"void","x-component":"ArrayTable.Column","x-component-props":{width:200,title:t("Before change")},properties:{before:{type:"string","x-decorator":"FormItem","x-component":"Value"}}},column5:{type:"void","x-component":"ArrayTable.Column","x-component-props":{width:200,title:t("After change")},properties:{after:{type:"string","x-decorator":"FormItem","x-component":"Value"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},column1:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{createdAt:{"x-component":"CollectionField","x-read-pretty":!0}}},column2:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{type:{"x-component":"CollectionField","x-read-pretty":!0}}},column3:{type:"void","x-component":"TableV2.Column",title:t("Collection display name"),properties:{collection:{"x-component":"Collection","x-read-pretty":!0}}}},r),{column4:{type:"void","x-component":"TableV2.Column",title:t("User"),properties:{user:{"x-component":"Username","x-read-pretty":!0}}}})}}}})};w.Decorator=s.observer(o=>{var c;const r=e.useCollection_deprecated(),l=e.useRecord();let n=(c=o==null?void 0:o.params)==null?void 0:c.filter;if(r.name){const u=l==null?void 0:l[r.filterTargetKey||"id"];n?n={$and:[n,{collectionName:r.name,recordId:`${u}`}]}:n={collectionName:r.name,recordId:`${u}`}}const p={collection:"auditLogs",resource:"auditLogs",action:"list",params:x(m({pageSize:20,appends:["collection","user"]},o.params),{filter:n,sort:"-createdAt"}),rowKey:"id",showIndex:!0,dragSort:!1};return i.jsx(L.Provider,{value:!!r.name,children:i.jsx(e.ExtendCollectionsProvider,{collections:[$],children:i.jsx(e.TableBlockProvider,x(m({},p),{children:o.children}))})})},{displayName:"AuditLogs.Decorator"}),w.Designer=R;const Z=()=>{const o={type:"void",title:t("Actions"),"x-decorator":"TableV2.Column.ActionBar","x-component":"TableV2.Column","x-designer":"TableV2.ActionColumnDesigner","x-initializer":"auditLogsTable:configureItemActions","x-action-column":"actions",properties:{actions:{type:"void","x-decorator":"DndContext","x-component":"Space","x-component-props":{split:"|"},properties:{}}}},r=e.useSchemaInitializerItem();return i.jsx(e.InitializerWithSwitch,x(m({},r),{schema:o,item:r,type:"x-action-column"}))},z=o=>i.jsx(e.SchemaComponentOptions,{components:{AuditLogs:w,AuditLogsBlockProvider:U,AuditLogsBlockInitializer:P,AuditLogsValue:_,AuditLogsField:W,AuditLogsViewActionInitializer:J,AuditLogsTableActionColumnInitializer:Z},children:o.children}),ee=new e.SchemaInitializer({name:"auditLogsTable:configureItemActions",insertPosition:"beforeEnd",Component:o=>i.jsx(d.MenuOutlined,x(m({},o),{style:{cursor:"pointer"}})),useInsert(){const o=s.useFieldSchema(),r=e.useAPIClient(),{refresh:l}=e.useDesignable(),{t:n}=C();return p=>{const c=o.reduceProperties((S,f)=>f["x-component"]==="Space"?f:S,null);if(!c)return;const u=e.createDesignable({t:n,api:r,refresh:l,current:c});u.loadAPIClientEvents(),u.insertBeforeEnd(p)}},items:[{name:"enableActions",type:"itemGroup",title:t("Enable actions"),children:[{name:"view",type:"item",title:t("View"),Component:"AuditLogsViewActionInitializer",schema:{"x-component":"Action.Link","x-action":"view","x-decorator":"ACLActionProvider"}}]},{name:"divider",type:"divider"},{name:"columnWidth",type:"item",title:t("Column width"),Component:e.Resizable}]}),oe=new e.SchemaInitializer({name:"auditLogsTable:configureActions",title:t("Configure actions"),icon:"SettingOutlined",style:{marginLeft:8},items:[{type:"itemGroup",title:t("Enable actions"),name:"enableActions",children:[{name:"filter",title:t("Filter"),Component:"FilterActionInitializer",schema:{"x-align":"left"}},{name:"refresh",title:t("Refresh"),Component:"RefreshActionInitializer",schema:{"x-align":"right"}}]}]}),te=()=>{const o=e.useInheritsTableColumnInitializerFields(),{t:r}=C(),l=e.useCompile();if(!(o!=null&&o.length))return null;const n=[];return o.forEach(p=>{Object.values(p)[0].length&&n.push({type:"itemGroup",divider:!0,title:r("Parent collection fields")+"("+l(`${Object.keys(p)[0]}`)+")",children:Object.values(p)[0].filter(c=>{var u;return!((u=c==null?void 0:c.field)!=null&&u.isForeignKey)})})}),i.jsx(e.SchemaInitializerChildren,{children:n})},ie=()=>{const o=e.useAssociatedTableColumnInitializerFields(),{t:r}=C();if(!(o!=null&&o.length))return null;const l=[{type:"itemGroup",divider:!0,title:r("Display association fields"),children:o}];return i.jsx(e.SchemaInitializerChildren,{children:l})},re=new e.SchemaInitializer({name:"auditLogsTable:configureColumns",insertPosition:"beforeEnd",icon:"SettingOutlined",title:t("Configure columns"),wrap(o){return o["x-action-column"]?o:{type:"void","x-toolbar":"TableColumnSchemaToolbar","x-settings":"fieldSettings:TableColumn","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{[o.name]:m({},o)}}},items:[{name:"displayFields",type:"itemGroup",title:t("Display fields"),useChildren:e.useTableColumnInitializerFields},{name:"parentCollectionFields",Component:te},{name:"associationFields",Component:ie},{name:"actionColumn",title:t("Action column"),Component:"AuditLogsTableActionColumnInitializer"}]});class k extends e.Plugin{load(){return E(this,null,function*(){this.app.use(z),this.app.schemaInitializerManager.add(oe),this.app.schemaInitializerManager.add(ee),this.app.schemaInitializerManager.add(re);const r=this.app.schemaInitializerManager.get("page:addBlock"),l=this.app.schemaInitializerManager.get("popup:common:addBlock"),n={title:t("Audit logs"),Component:"AuditLogsBlockInitializer"};r.add("otherBlocks.auditLogs",n),l.add("otherBlocks.auditLogs",n)})}}a.AuditLogsBlockInitializer=P,a.AuditLogsPlugin=k,a.AuditLogsProvider=z,a.default=k,Object.defineProperties(a,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
1
+ (function(a,e){typeof exports=="object"&&typeof module!="undefined"?e(exports,require("@tachybase/client"),require("react/jsx-runtime"),require("@ant-design/icons"),require("react-i18next"),require("@tachybase/schema"),require("@tachybase/utils/client"),require("react"),require("@tachybase/components")):typeof define=="function"&&define.amd?define(["exports","@tachybase/client","react/jsx-runtime","@ant-design/icons","react-i18next","@tachybase/schema","@tachybase/utils/client","react","@tachybase/components"],e):(a=typeof globalThis!="undefined"?globalThis:a||self,e(a["@tachybase/plugin-audit-logs"]={},a["@tachybase/client"],a.jsxRuntime,a["@ant-design/icons"],a["react-i18next"],a["@tachybase/schema"],a["@tachybase/utils"],a.react,a["@tachybase/components"]))})(this,function(a,e,i,d,S,s,v,b,y){"use strict";var ne=Object.defineProperty,ae=Object.defineProperties;var le=Object.getOwnPropertyDescriptors;var F=Object.getOwnPropertySymbols;var N=Object.prototype.hasOwnProperty,j=Object.prototype.propertyIsEnumerable;var D=(a,e,i)=>e in a?ne(a,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):a[e]=i,m=(a,e)=>{for(var i in e||(e={}))N.call(e,i)&&D(a,i,e[i]);if(F)for(var i of F(e))j.call(e,i)&&D(a,i,e[i]);return a},x=(a,e)=>ae(a,le(e));var q=(a,e)=>{var i={};for(var d in a)N.call(a,d)&&e.indexOf(d)<0&&(i[d]=a[d]);if(a!=null&&F)for(var d of F(a))e.indexOf(d)<0&&j.call(a,d)&&(i[d]=a[d]);return i};var E=(a,e,i)=>new Promise((d,S)=>{var s=y=>{try{b(i.next(y))}catch(h){S(h)}},v=y=>{try{b(i.throw(y))}catch(h){S(h)}},b=y=>y.done?d(y.value):Promise.resolve(y.value).then(s,v);b((i=i.apply(a,e)).next())});const h="@tachybase/plugin-audit-logs";function C(){return S.useTranslation(h)}const t=o=>e.tval(o,{ns:h}),P=()=>{const{insert:o}=e.useSchemaInitializer(),{t:r}=C(),l=e.useSchemaInitializerItem(),n=e.createTableBlockSchema({collection:"auditLogs",rowKey:"id",tableActionInitializers:"auditLogsTable:configureActions",tableColumnInitializers:"auditLogsTable:configureColumns",tableActionColumnInitializers:"auditLogsTable:configureItemActions",tableBlockProvider:"AuditLogsBlockProvider",disableTemplate:!0});return i.jsx(e.SchemaInitializerItem,m({icon:i.jsx(d.TableOutlined,{}),onClick:()=>{o(n)},title:r("Audit Logs")},l))},O=()=>({name:"auditLogs",title:t("Audit logs"),fields:[{name:"createdAt",type:"date",interface:"createdAt",uiSchema:{type:"datetime",title:t("Created at"),"x-component":"DatePicker","x-component-props":{showTime:!0,ellipsis:!0},"x-read-pretty":!0}},{name:"type",type:"string",interface:"select",uiSchema:{type:"string",title:t("Action type"),"x-component":"Select","x-component-props":{ellipsis:!0},"x-read-pretty":!0,enum:[{label:t("Create record"),value:"create",color:"lime"},{label:t("Update record"),value:"update",color:"gold"},{label:t("Delete record"),value:"destroy",color:"magenta"}]}},{name:"recordId",type:"string",interface:"input",uiSchema:{title:t("Record ID"),type:"string","x-component":"Input","x-component-props":{ellipsis:!0}}},{collectionName:"auditLogs",name:"collection",type:"belongsTo",interface:"m2o",target:"collections",targetKey:"name",sourceKey:"id",foreignKey:"collectionName",uiSchema:{type:"object",title:t("Collection"),"x-component":"AssociationField","x-component-props":{fieldNames:{value:"name",label:"title"},ellipsis:!0},"x-read-pretty":!0}},{name:"collectionName",type:"string",interface:"string",uiSchema:{type:"string",title:t("Collection name"),"x-component":"Input"}},{name:"user",collectionName:"auditLogs",type:"belongsTo",interface:"createdBy",targetKey:"id",foreignKey:"createdById",target:"users",uiSchema:{type:"object",title:t("User"),"x-component":"AssociationField","x-component-props":{fieldNames:{value:"id",label:"nickname"},ellipsis:!0},"x-read-pretty":!0}},{name:"changes",collectionName:"auditLogs",type:"hasMany",interface:"subTable",target:"auditChanges",foreignKey:"auditLogId",targetKey:"id",uiSchema:{type:"object",title:t("Details of changes")}},{type:"bigInt",name:"id",interface:"number",uiSchema:{type:"number",title:"ID","x-component":"InputNumber"}}]}),K=()=>({name:"auditChanges",title:t("Audit Changes"),fields:[{name:"field",type:"json",interface:"input",uiSchema:{title:t("Field"),"x-component":"AuditLogsField"}},{type:"json",name:"before",interface:"input",uiSchema:{title:t("Before change"),"x-component":"AuditLogsValue"}},{type:"json",name:"after",interface:"input",uiSchema:{title:t("After change"),"x-component":"AuditLogsValue"}}]}),M=()=>({name:"collections",title:t("Collections"),fields:[{name:"name",type:"string",interface:"input",uiSchema:{title:t("Collection name"),type:"string","x-component":"Input","x-component-props":{ellipsis:!0}}},{name:"title",type:"string",interface:"input",uiSchema:{title:t("Collection display name"),type:"string","x-component":"Input","x-component-props":{ellipsis:!0}}}]}),U=l=>{var n=l,{children:o}=n,r=q(n,["children"]);const p=K(),c=O(),u=M();return i.jsx(e.ExtendCollectionsProvider,{collections:[c,p,u],children:i.jsx(e.TableBlockProvider,x(m({name:"audit-logs"},r),{children:o}))})},W=s.observer(()=>{var l,n,p,c;const o=s.useField(),r=e.useCompile();return o.value?i.jsx(e.EllipsisWithTooltip,{ellipsis:!0,children:(n=(l=o.value)==null?void 0:l.uiSchema)!=null&&n.title?r((c=(p=o.value)==null?void 0:p.uiSchema)==null?void 0:c.title):o.value.name}):null},{displayName:"AuditLogsField"}),_=s.observer(()=>{var l,n;const o=s.useField(),r=e.useRecord();return(l=r.field)!=null&&l.uiSchema?i.jsx(e.FormProvider,{children:i.jsx(e.SchemaComponent,{schema:x(m({name:r.field.name},(n=r.field)==null?void 0:n.uiSchema),{default:o.value,"x-read-pretty":!0})})}):i.jsx(e.EllipsisWithTooltip,{ellipsis:!0,children:o.value?JSON.stringify(o.value):null})},{displayName:"AuditLogsValue"}),J=()=>{const o={type:"string","x-component":"AssociationField","x-decorator":"FormItem","x-collection-field":"auditLogs.changes","x-read-pretty":!0,"x-component-props":{multiple:!0,fieldNames:{value:"id",label:"id"},mode:"SubTable"},properties:{block:{type:"void","x-component":"AssociationField.SubTable",properties:{[v.uid()]:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{field:{"x-collection-field":"auditChanges.field","x-component":"CollectionField","x-read-pretty":!0,"x-component-props":{ellipsis:!0}}}},[v.uid()]:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{before:{"x-collection-field":"auditChanges.before","x-component":"CollectionField","x-read-pretty":!0,"x-component-props":{ellipsis:!0}}}},[v.uid()]:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{after:{"x-collection-field":"auditChanges.after","x-component":"CollectionField","x-read-pretty":!0,"x-component-props":{ellipsis:!0}}}}}}}},r={type:"void",title:t("View"),"x-action":"view","x-toolbar":"ActionSchemaToolbar","x-settings":"actionSettings:view","x-component":"Action","x-component-props":{openMode:"drawer"},properties:{drawer:{type:"void",title:t("View record"),"x-component":"Action.Container","x-component-props":{className:"tb-action-popup"},properties:{tabs:{type:"void","x-component":"Tabs","x-component-props":{},properties:{tab1:{type:"void",title:t("Details"),"x-component":"Tabs.TabPane","x-designer":"Tabs.Designer","x-component-props":{},properties:{grid:{type:"void","x-component":"Grid",properties:{"7ypqrxaqysp":{type:"void","x-component":"Grid.Row",properties:{"1fc2l8dwe7m":{type:"void","x-component":"Grid.Col",properties:{"5ley6xifrsb":{type:"void","x-acl-action":"auditLogs:get","x-decorator":"FormBlockProvider","x-decorator-props":{resource:"auditLogs",collection:"auditLogs",readPretty:!0,action:"get",params:{appends:["collection","user","changes"]},useParams:"{{ useParamsFromRecord }}",useSourceId:"{{ useSourceIdFromParentRecord }}"},"x-component":"CardItem",properties:{bv710pbf9w6:{type:"void","x-component":"FormV2","x-read-pretty":!0,"x-component-props":{useProps:"{{ useFormBlockProps }}"},properties:{grid:{type:"void","x-component":"Grid",properties:{g4c24abnbd9:{type:"void","x-component":"Grid.Row",properties:{fkt9dj5lu1k:{type:"void","x-component":"Grid.Col",properties:{createdAt:{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"auditLogs.createdAt","x-component-props":{},"x-read-pretty":!0}}}}},l267bkv423v:{type:"void","x-component":"Grid.Row",properties:{tehaepm5xqy:{type:"void","x-component":"Grid.Col",properties:{type:{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"auditLogs.type","x-component-props":{},"x-read-pretty":!0}}}}},zhmn2tkzdh2:{type:"void","x-component":"Grid.Row",properties:{yuwyej17i64:{type:"void","x-component":"Grid.Col",properties:{recordId:{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"auditLogs.recordId","x-component-props":{}}}}}},"6q933ic06mj":{type:"void","x-component":"Grid.Row",properties:{nwtbkqd99zl2:{type:"void","x-component":"Grid.Col",properties:{"collection.title":{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"auditLogs.collection.title","x-component-props":{}}}},nwtbkqd99zl1:{type:"void","x-component":"Grid.Col",properties:{"collection.name":{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"auditLogs.collection.name","x-component-props":{}}}}}},xd4kzulndqk:{type:"void","x-component":"Grid.Row",properties:{k3sd72n83zd:{type:"void","x-component":"Grid.Col",properties:{user:{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-collection-field":"auditLogs.user","x-component-props":{},"x-read-pretty":!0,properties:{viewer:{type:"void",title:t("View record"),"x-component":"RecordPicker.Viewer","x-component-props":{className:"tb-action-popup"},properties:{tabs:{type:"void","x-component":"Tabs","x-component-props":{},"x-initializer":"TabPaneInitializers",properties:{tab1:{type:"void",title:t("Details"),"x-component":"Tabs.TabPane","x-designer":"Tabs.Designer","x-component-props":{},properties:{grid:{type:"void","x-component":"Grid","x-initializer":"popup:common:addBlock"}}}}}}}}}}}}},"3lghgclbtcg":{type:"void","x-component":"Grid.Row",properties:{"8l1v1auwlx0":{type:"void","x-component":"Grid.Col",properties:{changes:o}}}}}}}}}}}}}}}}}}}}}}}};return i.jsx(e.ActionInitializer,{schema:r})},R=()=>{var f,V,G,B;const{name:o,title:r}=e.useCollection_deprecated(),l=s.useField(),n=s.useFieldSchema(),{form:p}=e.useFormBlockContext(),{service:c}=e.useTableBlockContext(),{t:u}=C(),{dn:T}=e.useDesignable();return i.jsxs(e.GeneralSchemaDesigner,{title:r||o,children:[i.jsx(e.SchemaSettingsDataScope,{collectionName:o,defaultFilter:((V=(f=n==null?void 0:n["x-decorator-props"])==null?void 0:f.params)==null?void 0:V.filter)||{},form:p,onSubmit:({filter:A})=>{var I;const g=l.decoratorProps.params||{};g.filter=A,l.decoratorProps.params=g,n["x-decorator-props"].params=g,c.run(x(m({},(I=c.params)==null?void 0:I[0]),{filter:A,page:1})),T.emit("patch",{schema:{"x-uid":n["x-uid"],"x-decorator-props":n["x-decorator-props"]}})}}),i.jsx(e.SchemaSettingsSelectItem,{title:u("Records per page"),value:((B=(G=l.decoratorProps)==null?void 0:G.params)==null?void 0:B.pageSize)||20,options:[{label:"10",value:10},{label:"20",value:20},{label:"50",value:50},{label:"100",value:100},{label:"200",value:200}],onChange:A=>{var I;const g=l.decoratorProps.params||{};g.pageSize=A,l.decoratorProps.params=g,n["x-decorator-props"].params=g,c.run(x(m({},(I=c.params)==null?void 0:I[0]),{pageSize:A,page:1})),T.emit("patch",{schema:{"x-uid":n["x-uid"],"x-decorator-props":n["x-decorator-props"]}})}}),i.jsx(e.SchemaSettingsDivider,{}),i.jsx(e.SchemaSettingsRemove,{removeParentsIfNoChildren:!0,breakRemoveOn:{"x-component":"Grid"}})]})},$={name:"auditLogs",title:t("Audit logs"),fields:[{name:"createdAt",type:"date",interface:"createdAt",uiSchema:{type:"datetime",title:t("Created at"),"x-component":"DatePicker","x-component-props":{showTime:!0},"x-read-pretty":!0}},{name:"type",type:"string",interface:"select",uiSchema:{type:"string",title:t("Action type"),"x-component":"Select","x-read-pretty":!0,enum:[{label:t("Create record"),value:"create",color:"lime"},{label:t("Update record"),value:"update",color:"gold"},{label:t("Delete record"),value:"destroy",color:"magenta"}]}}]},H=s.observer(()=>{var r,l;const o=s.useField();return i.jsx("div",{children:((r=o==null?void 0:o.value)==null?void 0:r.nickname)||((l=o.value)==null?void 0:l.id)})},{displayName:"Username"}),Q=s.observer(()=>{const o=s.useField(),{title:r,name:l}=o.value||{},n=e.useCompile();return i.jsx("div",{children:r?n(r):l})},{displayName:"Collection"}),X=s.observer(()=>{var l,n,p,c;const o=s.useField(),r=e.useCompile();return o.value?i.jsx("div",{children:(n=(l=o.value)==null?void 0:l.uiSchema)!=null&&n.title?r((c=(p=o.value)==null?void 0:p.uiSchema)==null?void 0:c.title):o.value.name}):null},{displayName:"Field"}),Y=s.observer(()=>{var l,n;const o=s.useField(),r=y.ArrayTable.useRecord();return(l=r.field)!=null&&l.uiSchema?i.jsx(e.FormProvider,{children:i.jsx(e.SchemaComponent,{schema:x(m({name:r.field.name},(n=r.field)==null?void 0:n.uiSchema),{default:o.value,"x-read-pretty":!0})})}):i.jsx("div",{children:o.value?JSON.stringify(o.value):null})},{displayName:"Value"}),L=b.createContext(null);L.displayName="IsAssociationBlock";const w=()=>{const o=b.useContext(L),r={};return o||(r.column31={type:"void","x-component":"TableV2.Column",title:t("Record ID"),properties:{recordId:{"x-component":"Input","x-read-pretty":!0}}}),i.jsx(e.SchemaComponent,{memoized:!0,components:{ArrayTable:y.ArrayTable,Username:H,Collection:Q,Field:X,Value:Y},schema:{type:"void",name:"lfm4trkw8j3","x-component":"div",properties:{actions:{type:"void","x-component":"ActionBar","x-component-props":{style:{marginBottom:16}},properties:{filter:{type:"void",title:t("Filter"),"x-action":"filter","x-component":"Filter.Action","x-component-props":{icon:"FilterOutlined",useProps:"{{ useFilterActionProps }}"},"x-align":"left"}}},y84dlntcaup:{type:"array","x-component":"TableV2","x-component-props":{rowKey:"id",rowSelection:{type:"checkbox"},useProps:"{{ useTableBlockProps }}"},properties:x(m({actions:{type:"void",title:t("Actions"),"x-action-column":"actions","x-decorator":"TableV2.Column.ActionBar","x-component":"TableV2.Column","x-designer":"TableV2.ActionColumnDesigner","x-initializer":"table:configureItemActions",properties:{actions:{type:"void","x-decorator":"DndContext","x-component":"Space","x-component-props":{split:"|"},properties:{o80rypwmeeg:{type:"void",title:t("View"),"x-toolbar":"ActionSchemaToolbar","x-settings":"actionSettings:view","x-component":"Action.Link","x-component-props":{openMode:"drawer"},properties:{drawer:{type:"void",title:t("View record"),"x-component":"Action.Container","x-component-props":{className:"tb-action-popup"},properties:{grid:{type:"void","x-component":"Grid",properties:{tdlav8o9o17:{type:"void","x-component":"Grid.Row",properties:{"7bsnaf47i6g":{type:"void","x-component":"Grid.Col",properties:{"6s2qbihe3tu":{type:"void","x-acl-action":"auditLogs:get","x-decorator":"FormBlockProvider","x-decorator-props":{resource:"auditLogs",collection:"auditLogs",readPretty:!0,action:"get",params:{appends:["collection","user","changes"]},useParams:"{{ useParamsFromRecord }}",useSourceId:"{{ useSourceIdFromParentRecord }}"},"x-component":"CardItem",properties:{mevpuonrda0:{type:"void","x-component":"FormV2","x-read-pretty":!0,"x-component-props":{useProps:"{{ useFormBlockProps }}"},properties:{grid:{type:"void","x-component":"Grid",properties:{row1:{type:"void","x-component":"Grid.Row",properties:{col11:{type:"void","x-component":"Grid.Col",properties:{collection:{type:"string",title:t("Collection display name"),"x-component":"Collection","x-decorator":"FormItem","x-read-pretty":!0}}}}},row2:{type:"void","x-component":"Grid.Row",properties:{col21:{type:"void","x-component":"Grid.Col",properties:{type:{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-read-pretty":!0}}}}},row3:{type:"void","x-component":"Grid.Row",properties:{col31:{type:"void","x-component":"Grid.Col",properties:{createdAt:{type:"string","x-component":"CollectionField","x-decorator":"FormItem","x-read-pretty":!0}}}}},row4:{type:"void","x-component":"Grid.Row",properties:{col41:{type:"void","x-component":"Grid.Col",properties:{user:{type:"string",title:t("User"),"x-component":"Username","x-decorator":"FormItem","x-read-pretty":!0}}}}},row5:{type:"void","x-component":"Grid.Row",properties:{col51:{type:"void","x-component":"Grid.Col",properties:{changes:{type:"array",title:t("Field value changes"),"x-decorator":"FormItem","x-component":"ArrayTable","x-component-props":{pagination:{pageSize:10},scroll:{x:"100%"}},items:{type:"object",properties:{column3:{type:"void","x-component":"ArrayTable.Column","x-component-props":{width:200,title:t("Field")},properties:{field:{type:"string","x-component":"Field"}}},column4:{type:"void","x-component":"ArrayTable.Column","x-component-props":{width:200,title:t("Before change")},properties:{before:{type:"string","x-decorator":"FormItem","x-component":"Value"}}},column5:{type:"void","x-component":"ArrayTable.Column","x-component-props":{width:200,title:t("After change")},properties:{after:{type:"string","x-decorator":"FormItem","x-component":"Value"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},column1:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{createdAt:{"x-component":"CollectionField","x-read-pretty":!0}}},column2:{type:"void","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{type:{"x-component":"CollectionField","x-read-pretty":!0}}},column3:{type:"void","x-component":"TableV2.Column",title:t("Collection display name"),properties:{collection:{"x-component":"Collection","x-read-pretty":!0}}}},r),{column4:{type:"void","x-component":"TableV2.Column",title:t("User"),properties:{user:{"x-component":"Username","x-read-pretty":!0}}}})}}}})};w.Decorator=s.observer(o=>{var c;const r=e.useCollection_deprecated(),l=e.useRecord();let n=(c=o==null?void 0:o.params)==null?void 0:c.filter;if(r.name){const u=l==null?void 0:l[r.filterTargetKey||"id"];n?n={$and:[n,{collectionName:r.name,recordId:`${u}`}]}:n={collectionName:r.name,recordId:`${u}`}}const p={collection:"auditLogs",resource:"auditLogs",action:"list",params:x(m({pageSize:20,appends:["collection","user"]},o.params),{filter:n,sort:"-createdAt"}),rowKey:"id",showIndex:!0,dragSort:!1};return i.jsx(L.Provider,{value:!!r.name,children:i.jsx(e.ExtendCollectionsProvider,{collections:[$],children:i.jsx(e.TableBlockProvider,x(m({},p),{children:o.children}))})})},{displayName:"AuditLogs.Decorator"}),w.Designer=R;const Z=()=>{const o={type:"void",title:t("Actions"),"x-decorator":"TableV2.Column.ActionBar","x-component":"TableV2.Column","x-designer":"TableV2.ActionColumnDesigner","x-initializer":"auditLogsTable:configureItemActions","x-action-column":"actions",properties:{actions:{type:"void","x-decorator":"DndContext","x-component":"Space","x-component-props":{split:"|"},properties:{}}}},r=e.useSchemaInitializerItem();return i.jsx(e.InitializerWithSwitch,x(m({},r),{schema:o,item:r,type:"x-action-column"}))},z=o=>i.jsx(e.SchemaComponentOptions,{components:{AuditLogs:w,AuditLogsBlockProvider:U,AuditLogsBlockInitializer:P,AuditLogsValue:_,AuditLogsField:W,AuditLogsViewActionInitializer:J,AuditLogsTableActionColumnInitializer:Z},children:o.children}),ee=new e.SchemaInitializer({name:"auditLogsTable:configureItemActions",insertPosition:"beforeEnd",Component:o=>i.jsx(d.MenuOutlined,x(m({},o),{style:{cursor:"pointer"}})),useInsert(){const o=s.useFieldSchema(),r=e.useAPIClient(),{refresh:l}=e.useDesignable(),{t:n}=C();return p=>{const c=o.reduceProperties((T,f)=>f["x-component"]==="Space"?f:T,null);if(!c)return;const u=e.createDesignable({t:n,api:r,refresh:l,current:c});u.loadAPIClientEvents(),u.insertBeforeEnd(p)}},items:[{name:"enableActions",type:"itemGroup",title:t("Enable actions"),children:[{name:"view",type:"item",title:t("View"),Component:"AuditLogsViewActionInitializer",schema:{"x-component":"Action.Link","x-action":"view","x-decorator":"ACLActionProvider"}}]},{name:"divider",type:"divider"},{name:"columnWidth",type:"item",title:t("Column width"),Component:e.Resizable}]}),oe=new e.SchemaInitializer({name:"auditLogsTable:configureActions",title:t("Configure actions"),icon:"SettingOutlined",style:{marginLeft:8},items:[{type:"itemGroup",title:t("Enable actions"),name:"enableActions",children:[{name:"filter",title:t("Filter"),Component:"FilterActionInitializer",schema:{"x-align":"left"}},{name:"refresh",title:t("Refresh"),Component:"RefreshActionInitializer",schema:{"x-align":"right"}}]}]}),te=()=>{const o=e.useInheritsTableColumnInitializerFields(),{t:r}=C(),l=e.useCompile();if(!(o!=null&&o.length))return null;const n=[];return o.forEach(p=>{Object.values(p)[0].length&&n.push({type:"itemGroup",divider:!0,title:r("Parent collection fields")+"("+l(`${Object.keys(p)[0]}`)+")",children:Object.values(p)[0].filter(c=>{var u;return!((u=c==null?void 0:c.field)!=null&&u.isForeignKey)})})}),i.jsx(e.SchemaInitializerChildren,{children:n})},ie=()=>{const o=e.useAssociatedTableColumnInitializerFields(),{t:r}=C();if(!(o!=null&&o.length))return null;const l=[{type:"itemGroup",divider:!0,title:r("Display association fields"),children:o}];return i.jsx(e.SchemaInitializerChildren,{children:l})},re=new e.SchemaInitializer({name:"auditLogsTable:configureColumns",insertPosition:"beforeEnd",icon:"SettingOutlined",title:t("Configure columns"),wrap(o){return o["x-action-column"]?o:{type:"void","x-toolbar":"TableColumnSchemaToolbar","x-settings":"fieldSettings:TableColumn","x-decorator":"TableV2.Column.Decorator","x-component":"TableV2.Column",properties:{[o.name]:m({},o)}}},items:[{name:"displayFields",type:"itemGroup",title:t("Display fields"),useChildren:e.useTableColumnInitializerFields},{name:"parentCollectionFields",Component:te},{name:"associationFields",Component:ie},{name:"actionColumn",title:t("Action column"),Component:"AuditLogsTableActionColumnInitializer"}]});class k extends e.Plugin{load(){return E(this,null,function*(){this.app.use(z),this.app.schemaInitializerManager.add(oe),this.app.schemaInitializerManager.add(ee),this.app.schemaInitializerManager.add(re);const r=this.app.schemaInitializerManager.get("page:addBlock"),l=this.app.schemaInitializerManager.get("popup:common:addBlock"),n={title:t("Audit logs"),Component:"AuditLogsBlockInitializer"};r.add("otherBlocks.auditLogs",n),l.add("otherBlocks.auditLogs",n)})}}a.AuditLogsBlockInitializer=P,a.AuditLogsPlugin=k,a.AuditLogsProvider=z,a.default=k,Object.defineProperties(a,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
@@ -1,11 +1,11 @@
1
1
  module.exports = {
2
2
  "react": "18.3.1",
3
- "@tachybase/client": "0.23.22",
4
- "@tachybase/schema": "0.23.22",
3
+ "@tachybase/client": "0.23.35",
4
+ "@tachybase/schema": "0.23.35",
5
5
  "@ant-design/icons": "5.3.7",
6
- "@tachybase/server": "0.23.22",
7
- "@tachybase/utils": "0.23.22",
8
- "@tachybase/components": "0.23.22",
9
- "react-i18next": "15.2.0",
10
- "@tachybase/database": "0.23.22"
6
+ "@tachybase/database": "0.23.35",
7
+ "@tachybase/server": "0.23.35",
8
+ "@tachybase/utils": "0.23.35",
9
+ "@tachybase/components": "0.23.35",
10
+ "react-i18next": "15.2.0"
11
11
  };
@@ -1 +1,2 @@
1
- export declare function afterCreate(model: any, options: any): Promise<void>;
1
+ import { Plugin } from '@tachybase/server';
2
+ export declare function afterCreate(model: any, options: any, plugin: Plugin): Promise<void>;
@@ -21,7 +21,7 @@ __export(after_create_exports, {
21
21
  });
22
22
  module.exports = __toCommonJS(after_create_exports);
23
23
  var import_constants = require("../constants");
24
- async function afterCreate(model, options) {
24
+ async function afterCreate(model, options, plugin) {
25
25
  var _a, _b, _c;
26
26
  if (options.logging === false) {
27
27
  return;
@@ -31,7 +31,6 @@ async function afterCreate(model, options) {
31
31
  return;
32
32
  }
33
33
  const transaction = options.transaction;
34
- const AuditLog = model.constructor.database.getCollection("auditLogs");
35
34
  const currentUserId = (_c = (_b = (_a = options == null ? void 0 : options.context) == null ? void 0 : _a.state) == null ? void 0 : _b.currentUser) == null ? void 0 : _c.id;
36
35
  try {
37
36
  const changes = [];
@@ -49,18 +48,24 @@ async function afterCreate(model, options) {
49
48
  }
50
49
  });
51
50
  }
52
- await AuditLog.repository.create({
53
- values: {
54
- type: import_constants.LOG_TYPE_CREATE,
55
- collectionName: model.constructor.name,
56
- recordId: model.get(model.constructor.primaryKeyAttribute),
57
- createdAt: model.get("createdAt"),
58
- userId: currentUserId,
59
- changes
51
+ const values = {
52
+ type: import_constants.LOG_TYPE_CREATE,
53
+ collectionName: model.constructor.name,
54
+ recordId: model.get(model.constructor.primaryKeyAttribute),
55
+ createdAt: model.get("createdAt"),
56
+ userId: currentUserId,
57
+ changes
58
+ };
59
+ plugin.sendSyncMessage(
60
+ {
61
+ type: "auditLog",
62
+ values
60
63
  },
61
- transaction,
62
- hooks: false
63
- });
64
+ {
65
+ transaction,
66
+ onlySelf: true
67
+ }
68
+ );
64
69
  } catch (error) {
65
70
  }
66
71
  }
@@ -1 +1,2 @@
1
- export declare function afterDestroy(model: any, options: any): Promise<void>;
1
+ import { Plugin } from '@tachybase/server';
2
+ export declare function afterDestroy(model: any, options: any, plugin: Plugin): Promise<void>;
@@ -21,14 +21,13 @@ __export(after_destroy_exports, {
21
21
  });
22
22
  module.exports = __toCommonJS(after_destroy_exports);
23
23
  var import_constants = require("../constants");
24
- async function afterDestroy(model, options) {
24
+ async function afterDestroy(model, options, plugin) {
25
25
  var _a, _b, _c;
26
26
  const { collection } = model.constructor;
27
27
  if (!collection || !collection.options.logging) {
28
28
  return;
29
29
  }
30
30
  const transaction = options.transaction;
31
- const AuditLog = model.constructor.database.getCollection("auditLogs");
32
31
  const currentUserId = (_c = (_b = (_a = options == null ? void 0 : options.context) == null ? void 0 : _a.state) == null ? void 0 : _b.currentUser) == null ? void 0 : _c.id;
33
32
  try {
34
33
  const changes = [];
@@ -43,17 +42,23 @@ async function afterDestroy(model, options) {
43
42
  });
44
43
  }
45
44
  });
46
- await AuditLog.repository.create({
47
- values: {
48
- type: import_constants.LOG_TYPE_DESTROY,
49
- collectionName: model.constructor.name,
50
- recordId: model.get(model.constructor.primaryKeyAttribute),
51
- userId: currentUserId,
52
- changes
45
+ const values = {
46
+ type: import_constants.LOG_TYPE_DESTROY,
47
+ collectionName: model.constructor.name,
48
+ recordId: model.get(model.constructor.primaryKeyAttribute),
49
+ userId: currentUserId,
50
+ changes
51
+ };
52
+ plugin.sendSyncMessage(
53
+ {
54
+ type: "auditLog",
55
+ values
53
56
  },
54
- transaction,
55
- hooks: false
56
- });
57
+ {
58
+ transaction,
59
+ onlySelf: true
60
+ }
61
+ );
57
62
  } catch (error) {
58
63
  }
59
64
  }
@@ -1 +1,2 @@
1
- export declare function afterUpdate(model: any, options: any): Promise<void>;
1
+ import { Plugin } from '@tachybase/server';
2
+ export declare function afterUpdate(model: any, options: any, plugin: Plugin): Promise<void>;
@@ -21,7 +21,7 @@ __export(after_update_exports, {
21
21
  });
22
22
  module.exports = __toCommonJS(after_update_exports);
23
23
  var import_constants = require("../constants");
24
- async function afterUpdate(model, options) {
24
+ async function afterUpdate(model, options, plugin) {
25
25
  var _a, _b, _c;
26
26
  const { collection } = model.constructor;
27
27
  if (!collection || !collection.options.logging) {
@@ -32,14 +32,25 @@ async function afterUpdate(model, options) {
32
32
  return;
33
33
  }
34
34
  const transaction = options.transaction;
35
- const AuditLog = model.constructor.database.getCollection("auditLogs");
36
35
  const currentUserId = (_c = (_b = (_a = options == null ? void 0 : options.context) == null ? void 0 : _a.state) == null ? void 0 : _b.currentUser) == null ? void 0 : _c.id;
37
36
  const changes = [];
38
37
  changed.forEach((key) => {
38
+ var _a2;
39
39
  const field = collection.findField((field2) => {
40
40
  return field2.name === key || field2.options.field === key;
41
41
  });
42
42
  if (field && !field.options.hidden) {
43
+ let before = model.previous(key);
44
+ let after = model.get(key);
45
+ if (before === after) {
46
+ return;
47
+ }
48
+ if ((before === null || before === void 0) && (after === null || after === void 0)) {
49
+ return;
50
+ }
51
+ if (field.type === "bigInt" && ((_a2 = field.options) == null ? void 0 : _a2.isForeignKey) && +before === +after) {
52
+ return;
53
+ }
43
54
  changes.push({
44
55
  field: field.options,
45
56
  after: model.get(key),
@@ -51,18 +62,24 @@ async function afterUpdate(model, options) {
51
62
  return;
52
63
  }
53
64
  try {
54
- await AuditLog.repository.create({
55
- values: {
56
- type: import_constants.LOG_TYPE_UPDATE,
57
- collectionName: model.constructor.name,
58
- recordId: model.get(model.constructor.primaryKeyAttribute),
59
- createdAt: model.get("updatedAt"),
60
- userId: currentUserId,
61
- changes
65
+ const values = {
66
+ type: import_constants.LOG_TYPE_UPDATE,
67
+ collectionName: model.constructor.name,
68
+ recordId: model.get(model.constructor.primaryKeyAttribute),
69
+ createdAt: model.get("updatedAt"),
70
+ userId: currentUserId,
71
+ changes
72
+ };
73
+ plugin.sendSyncMessage(
74
+ {
75
+ type: "auditLog",
76
+ values
62
77
  },
63
- transaction,
64
- hooks: false
65
- });
78
+ {
79
+ transaction,
80
+ onlySelf: true
81
+ }
82
+ );
66
83
  } catch (error) {
67
84
  }
68
85
  }
@@ -1,5 +1,14 @@
1
+ import { Transaction } from '@tachybase/database';
1
2
  import { Plugin } from '@tachybase/server';
2
3
  export default class PluginActionLogs extends Plugin {
4
+ private logsBuffer;
5
+ private logsTimer;
6
+ private logsDebounce;
7
+ afterAdd(): Promise<void>;
3
8
  beforeLoad(): Promise<void>;
9
+ addAuditListener(): Promise<void>;
4
10
  load(): Promise<void>;
11
+ handleSyncMessage(message: Readonly<any>): Promise<void>;
12
+ handleBatchLogs(values: Readonly<any>[], transaction?: Transaction): Promise<void>;
13
+ workerCreateAuditLog(values: any[], transaction?: Transaction): Promise<void>;
5
14
  }
@@ -30,14 +30,35 @@ __export(server_exports, {
30
30
  default: () => PluginActionLogs
31
31
  });
32
32
  module.exports = __toCommonJS(server_exports);
33
+ var import_node_worker_threads = require("node:worker_threads");
33
34
  var import_path = __toESM(require("path"));
34
35
  var import_server = require("@tachybase/server");
35
36
  var import_hooks = require("./hooks");
36
37
  class PluginActionLogs extends import_server.Plugin {
38
+ logsBuffer = [];
39
+ // 用于存储消息的缓冲区
40
+ logsTimer = null;
41
+ logsDebounce = 500;
42
+ async afterAdd() {
43
+ if (!import_node_worker_threads.isMainThread) {
44
+ this.addAuditListener();
45
+ }
46
+ }
37
47
  async beforeLoad() {
38
- this.db.on("afterCreate", import_hooks.afterCreate);
39
- this.db.on("afterUpdate", import_hooks.afterUpdate);
40
- this.db.on("afterDestroy", import_hooks.afterDestroy);
48
+ if (import_node_worker_threads.isMainThread) {
49
+ this.addAuditListener();
50
+ }
51
+ }
52
+ async addAuditListener() {
53
+ this.db.on("afterCreate", (model, options) => {
54
+ (0, import_hooks.afterCreate)(model, options, this);
55
+ });
56
+ this.db.on("afterUpdate", (model, options) => {
57
+ (0, import_hooks.afterUpdate)(model, options, this);
58
+ });
59
+ this.db.on("afterDestroy", (model, options) => {
60
+ (0, import_hooks.afterDestroy)(model, options, this);
61
+ });
41
62
  }
42
63
  async load() {
43
64
  await this.importCollections(import_path.default.resolve(__dirname, "collections"));
@@ -49,4 +70,70 @@ class PluginActionLogs extends import_server.Plugin {
49
70
  }
50
71
  });
51
72
  }
73
+ async handleSyncMessage(message) {
74
+ if ((message == null ? void 0 : message.type) === "auditLog") {
75
+ this.logsBuffer.push(message.values);
76
+ if (this.logsTimer) return;
77
+ this.logsTimer = setTimeout(() => {
78
+ const targetList = [...this.logsBuffer];
79
+ this.logsTimer = null;
80
+ if (!targetList.length) {
81
+ return;
82
+ }
83
+ this.logsBuffer = [];
84
+ this.handleBatchLogs(targetList);
85
+ }, this.logsDebounce);
86
+ }
87
+ }
88
+ async handleBatchLogs(values, transaction) {
89
+ var _a;
90
+ if (!import_node_worker_threads.isMainThread || !((_a = this.app.worker) == null ? void 0 : _a.available)) {
91
+ await this.workerCreateAuditLog(values);
92
+ } else {
93
+ await this.app.worker.callPluginMethod({
94
+ plugin: this.name,
95
+ method: "workerCreateAuditLog",
96
+ params: values,
97
+ reloadCols: false,
98
+ inputLog: {
99
+ length: values.length
100
+ }
101
+ });
102
+ }
103
+ }
104
+ async workerCreateAuditLog(values, transaction) {
105
+ const auditLogRepo = this.db.getRepository("auditLogs");
106
+ const auditChangeRepo = this.db.getRepository("auditChanges");
107
+ const now = /* @__PURE__ */ new Date();
108
+ values.forEach((value) => value.createdAt = now);
109
+ const insertedLogs = await auditLogRepo.model.bulkCreate(values, {
110
+ individualHooks: false,
111
+ // 禁用逐条钩子调用
112
+ transaction,
113
+ // 使用事务
114
+ returning: ["id"]
115
+ // 仅返回 id 字段
116
+ });
117
+ const changes = [];
118
+ insertedLogs.forEach((log, index) => {
119
+ const value = values[index];
120
+ if (!value.changes) {
121
+ return;
122
+ }
123
+ for (const change of value.changes) {
124
+ changes.push({
125
+ ...change,
126
+ auditLogId: log.id
127
+ });
128
+ }
129
+ });
130
+ if (changes.length > 0) {
131
+ await auditChangeRepo.model.bulkCreate(changes, {
132
+ individualHooks: false,
133
+ // 禁用逐条钩子调用
134
+ transaction
135
+ // 使用事务
136
+ });
137
+ }
138
+ }
52
139
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tachybase/plugin-audit-logs",
3
3
  "displayName": "Audit logs",
4
- "version": "0.23.22",
4
+ "version": "0.23.35",
5
5
  "description": "Audit logs.",
6
6
  "keywords": [
7
7
  "System management"
@@ -13,15 +13,15 @@
13
13
  "antd": "5.22.5",
14
14
  "react": "^18.3.1",
15
15
  "react-i18next": "^15.2.0",
16
- "@tachybase/components": "0.23.22"
16
+ "@tachybase/components": "0.23.35"
17
17
  },
18
18
  "peerDependencies": {
19
- "@tachybase/client": "0.23.22",
20
- "@tachybase/database": "0.23.22",
21
- "@tachybase/test": "0.23.22",
22
- "@tachybase/server": "0.23.22",
23
- "@tachybase/schema": "0.23.22",
24
- "@tachybase/utils": "0.23.22"
19
+ "@tachybase/database": "0.23.35",
20
+ "@tachybase/schema": "0.23.35",
21
+ "@tachybase/test": "0.23.35",
22
+ "@tachybase/server": "0.23.35",
23
+ "@tachybase/utils": "0.23.35",
24
+ "@tachybase/client": "0.23.35"
25
25
  },
26
26
  "description.zh-CN": "审计日志。",
27
27
  "displayName.zh-CN": "审计日志",