dinocollab-core 2.0.0 → 2.0.2
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/bin/codegen.js +66 -0
- package/dist/_virtual/_rollupPluginBabelHelpers.js +2 -2
- package/dist/api-context/drawer-global.js +1 -1
- package/dist/api-context/global-modal.js +1 -1
- package/dist/api-context/popover-global.js +1 -1
- package/dist/api-context/popover.js +1 -1
- package/dist/components/copy-to-clipboard.js +1 -1
- package/dist/components/create.multi-select-dropdown.js +1 -1
- package/dist/components/create.multi-select-dropdown.js.map +1 -1
- package/dist/components/help-tooltip.js +1 -1
- package/dist/data-view/convert-filter-to-graphql.js +1 -1
- package/dist/data-view/convert-filter-to-graphql.js.map +1 -1
- package/dist/data-view/create.active-filters-panel.js +1 -1
- package/dist/data-view/create.active-filters-panel.js.map +1 -1
- package/dist/data-view/create.data-view.js +1 -1
- package/dist/data-view/dino.js +1 -1
- package/dist/data-view/dino.js.map +1 -1
- package/dist/data-view/filter-store.js +1 -1
- package/dist/data-view/filter-store.js.map +1 -1
- package/dist/data-view/index.js +1 -1
- package/dist/data-view/query-param-url.js +1 -1
- package/dist/data-view/query-param-url.js.map +1 -1
- package/dist/data-view/ui.units.js.map +1 -1
- package/dist/data-view/view-mode.content.js +1 -1
- package/dist/form/create.autocomplete.chips.js +1 -1
- package/dist/form/create.date-expired.js +1 -1
- package/dist/form/create.date-expired.js.map +1 -1
- package/dist/form/create.date-picker.js +1 -1
- package/dist/form/create.date-picker.js.map +1 -1
- package/dist/form/create.form-comfirm.js +1 -1
- package/dist/form/create.form-comfirm.js.map +1 -1
- package/dist/form/create.form-grid-layout.js +1 -1
- package/dist/form/create.form-grid-layout.js.map +1 -1
- package/dist/form/create.input-file.csv-local-parser.js +1 -1
- package/dist/form/create.input-file.csv-local-parser.js.map +1 -1
- package/dist/form/create.input.file.js +1 -1
- package/dist/form/create.input.image-file.js +1 -1
- package/dist/form/create.input.js +1 -1
- package/dist/form/create.input.js.map +1 -1
- package/dist/form/create.select-simple.js +1 -1
- package/dist/form/create.select-simple.js.map +1 -1
- package/dist/form/create.select-with-api.js +1 -1
- package/dist/form/create.select-with-api.js.map +1 -1
- package/dist/form/modal-wrapper.js +1 -1
- package/dist/form/modal-wrapper.js.map +1 -1
- package/dist/form/validator.js +1 -1
- package/dist/form/validator.js.map +1 -1
- package/dist/http-service/base/crud-service-base.js +2 -0
- package/dist/http-service/base/crud-service-base.js.map +1 -0
- package/dist/http-service/base/gateway.js +2 -0
- package/dist/http-service/base/gateway.js.map +1 -0
- package/dist/http-service/base/helpers.js +2 -0
- package/dist/http-service/base/helpers.js.map +1 -0
- package/dist/http-service/base/service-base.js +2 -0
- package/dist/http-service/base/service-base.js.map +1 -0
- package/dist/http-service/graphql/app-profile.js +2 -0
- package/dist/http-service/graphql/app-profile.js.map +1 -0
- package/dist/http-service/graphql/graphql-request.js +2 -0
- package/dist/http-service/graphql/graphql-request.js.map +1 -0
- package/dist/http-service/graphql/key-converter.js.map +1 -0
- package/dist/http-service/graphql/request-param.js +2 -0
- package/dist/http-service/graphql/request-param.js.map +1 -0
- package/dist/http-service/graphql/types.js +2 -0
- package/dist/http-service/graphql/types.js.map +1 -0
- package/dist/http-service/index.js +2 -0
- package/dist/http-service/index.js.map +1 -0
- package/dist/mfe-auth/auth-enums.js +2 -0
- package/dist/mfe-auth/auth-enums.js.map +1 -0
- package/dist/mfe-auth/auth-mfe-manager.js +2 -0
- package/dist/mfe-auth/auth-mfe-manager.js.map +1 -0
- package/dist/mfe-auth/auth-mfe-provider.js +2 -0
- package/dist/mfe-auth/auth-mfe-provider.js.map +1 -0
- package/dist/mfe-auth/auth-types.js +2 -0
- package/dist/mfe-auth/auth-types.js.map +1 -0
- package/dist/mfe-auth/index.js +2 -0
- package/dist/mfe-auth/index.js.map +1 -0
- package/dist/mfe-auth/micro-frontend-auth-hooks.js +2 -0
- package/dist/mfe-auth/micro-frontend-auth-hooks.js.map +1 -0
- package/dist/mfe-navigate/index.js +2 -0
- package/dist/mfe-navigate/index.js.map +1 -0
- package/dist/mfe-navigate/mfe-navigate.debug.js +2 -0
- package/dist/mfe-navigate/mfe-navigate.debug.js.map +1 -0
- package/dist/mfe-navigate/mfe-navigate.remote.js +2 -0
- package/dist/mfe-navigate/mfe-navigate.remote.js.map +1 -0
- package/dist/mfe-navigate/nextjs/index.js +2 -0
- package/dist/mfe-navigate/nextjs/index.js.map +1 -0
- package/dist/mfe-navigate/nextjs/provider.js +2 -0
- package/dist/mfe-navigate/nextjs/provider.js.map +1 -0
- package/dist/mfe-navigate/react/index.js +2 -0
- package/dist/mfe-navigate/react/index.js.map +1 -0
- package/dist/mfe-navigate/react/provider.js +2 -0
- package/dist/mfe-navigate/react/provider.js.map +1 -0
- package/dist/redux/create.hoc-lazy.js +1 -1
- package/dist/table/create.action-row.js +1 -1
- package/dist/table/create.action-row.js.map +1 -1
- package/dist/table/create.table.js +1 -1
- package/dist/table/create.table.js.map +1 -1
- package/dist/table/dino.js +1 -1
- package/dist/table/dino.js.map +1 -1
- package/dist/table/helpers.js +1 -1
- package/dist/table/helpers.js.map +1 -1
- package/dist/table/index.js +1 -1
- package/dist/table/toolbar-pannel.js +1 -1
- package/dist/table/ui.buttons.js +1 -1
- package/dist/table/ui.buttons.js.map +1 -1
- package/dist/table/ui.units.js +1 -1
- package/dist/table/ui.units.js.map +1 -1
- package/dist/table-grid/create.table-grid.js +1 -1
- package/dist/table-grid/create.table-grid.js.map +1 -1
- package/dist/table-grid/filter-bar/create.filter-bar.js +1 -1
- package/dist/table-grid/item-actions.js +1 -1
- package/dist/table-grid/item-actions.js.map +1 -1
- package/dist/table-grid/toolbar-pannel.js +1 -1
- package/dist/table-grid/toolbar-pannel.js.map +1 -1
- package/dist/table-grid/url-query-param.js +1 -1
- package/dist/table-grid/url-query-param.js.map +1 -1
- package/dist/types/data-view/convert-filter-to-graphql.d.ts +3 -3
- package/dist/types/data-view/dino.d.ts +1 -1
- package/dist/types/data-view/index.d.ts +0 -1
- package/dist/types/http-service/base/crud-service-base.d.ts +68 -0
- package/dist/types/http-service/base/gateway.d.ts +3 -0
- package/dist/types/http-service/base/helpers.d.ts +31 -0
- package/dist/types/http-service/base/index.d.ts +5 -0
- package/dist/types/http-service/base/service-base.d.ts +132 -0
- package/dist/types/http-service/base/type.api-alert.d.ts +17 -0
- package/dist/types/http-service/base/types.d.ts +45 -0
- package/dist/types/http-service/graphql/app-profile.d.ts +17 -0
- package/dist/types/http-service/graphql/graphql-request.d.ts +83 -0
- package/dist/types/http-service/graphql/index.d.ts +5 -0
- package/dist/types/{data-view → http-service/graphql}/key-converter.d.ts +2 -1
- package/dist/types/http-service/graphql/request-param.d.ts +65 -0
- package/dist/types/http-service/graphql/types.d.ts +62 -0
- package/dist/types/http-service/index.d.ts +2 -0
- package/dist/types/mfe-auth/auth-enums.d.ts +40 -0
- package/dist/types/mfe-auth/auth-mfe-manager.d.ts +68 -0
- package/dist/types/mfe-auth/auth-mfe-provider.d.ts +19 -0
- package/dist/types/mfe-auth/auth-types.d.ts +33 -0
- package/dist/types/mfe-auth/index.d.ts +6 -0
- package/dist/types/mfe-auth/micro-frontend-auth-hooks.d.ts +164 -0
- package/dist/types/mfe-navigate/index.d.ts +2 -0
- package/dist/types/mfe-navigate/mfe-navigate.debug.d.ts +4 -0
- package/dist/types/mfe-navigate/mfe-navigate.remote.d.ts +11 -0
- package/dist/types/mfe-navigate/nextjs/index.d.ts +1 -0
- package/dist/types/mfe-navigate/nextjs/provider.d.ts +2 -0
- package/dist/types/mfe-navigate/react/index.d.ts +1 -0
- package/dist/types/mfe-navigate/react/provider.d.ts +3 -0
- package/dist/types/mfe-navigate/types.d.ts +13 -0
- package/dist/types/utils/index.d.ts +0 -1
- package/dist/utils/helpers.js +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/query-param.js +1 -1
- package/dist/utils/query-param.js.map +1 -1
- package/package.json +87 -47
- package/dist/data-view/key-converter.js.map +0 -1
- package/dist/types/utils/mfe-events.d.ts +0 -12
- package/dist/utils/mfe-events.js +0 -2
- package/dist/utils/mfe-events.js.map +0 -1
- /package/dist/{data-view → http-service/graphql}/key-converter.js +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export{CancelAction,default as ServiceBase}from"./base/service-base.js";export{HttpService,createHttpService}from"./base/gateway.js";export{default as CRUDServiceBase}from"./base/crud-service-base.js";export{processError}from"./base/helpers.js";export{default as GraphqlRequest,createGraphqlRequest}from"./graphql/graphql-request.js";export{EAppName}from"./graphql/types.js";export{RequestParam,createRequestBuilder}from"./graphql/request-param.js";export{createKeyConverter,getKeyConverter}from"./graphql/key-converter.js";
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var E,A;!function(E){E.UNAUTHENTICATED="UNAUTHENTICATED",E.AUTHENTICATED="AUTHENTICATED",E.AUTHENTICATING="AUTHENTICATING",E.LOADING="LOADING",E.ERROR="ERROR"}(E||(E={})),function(E){E.DASHBOARD="DASHBOARD",E.PROFILE="PROFILE",E.SETTINGS="SETTINGS",E.MEDIA_STORE="MEDIA_STORE",E.APP_HEADER="APP_HEADER",E.APP_FOOTER="APP_FOOTER",E.VIDEO_GROUP="VIDEO_GROUP",E.TRACK_GROUP="TRACK_GROUP",E.GENERIC="GENERIC"}(A||(A={}));export{E as AuthStatus,A as MicroFrontendType};
|
|
2
|
+
//# sourceMappingURL=auth-enums.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-enums.js","sources":["../../src/mfe-auth/auth-enums.ts"],"sourcesContent":["/**\r\n * Authentication Status Enumeration\r\n * Defines possible states of user authentication\r\n */\r\nexport enum AuthStatus {\r\n /** User is not authenticated */\r\n UNAUTHENTICATED = 'UNAUTHENTICATED',\r\n\r\n /** User is successfully authenticated */\r\n AUTHENTICATED = 'AUTHENTICATED',\r\n\r\n /** Authentication process is in progress */\r\n AUTHENTICATING = 'AUTHENTICATING',\r\n\r\n /** Loading authentication state or user data */\r\n LOADING = 'LOADING',\r\n\r\n /** Authentication error occurred */\r\n ERROR = 'ERROR'\r\n}\r\n\r\n/**\r\n * Micro Frontend Type Enumeration\r\n * Identifies different types of micro frontend components\r\n */\r\nexport enum MicroFrontendType {\r\n /** Main dashboard component */\r\n DASHBOARD = 'DASHBOARD',\r\n\r\n /** User profile component */\r\n PROFILE = 'PROFILE',\r\n\r\n /** Settings and configuration component */\r\n SETTINGS = 'SETTINGS',\r\n\r\n /** Media store and gallery component */\r\n MEDIA_STORE = 'MEDIA_STORE',\r\n\r\n /** Application header component */\r\n APP_HEADER = 'APP_HEADER',\r\n\r\n /** Application footer component */\r\n APP_FOOTER = 'APP_FOOTER',\r\n\r\n /** Video player and gallery component */\r\n VIDEO_GROUP = 'VIDEO_GROUP',\r\n\r\n /** Audio track and playlist component */\r\n TRACK_GROUP = 'TRACK_GROUP',\r\n\r\n /** Generic or custom micro frontend component */\r\n GENERIC = 'GENERIC'\r\n}\r\n"],"names":["AuthStatus","MicroFrontendType"],"mappings":"IAIYA,EAqBAC,GArBZ,SAAYD,GAEVA,EAAA,gBAAA,kBAGAA,EAAA,cAAA,gBAGAA,EAAA,eAAA,iBAGAA,EAAA,QAAA,UAGAA,EAAA,MAAA,OACD,CAfD,CAAYA,IAAAA,EAeX,CAAA,IAMD,SAAYC,GAEVA,EAAA,UAAA,YAGAA,EAAA,QAAA,UAGAA,EAAA,SAAA,WAGAA,EAAA,YAAA,cAGAA,EAAA,WAAA,aAGAA,EAAA,WAAA,aAGAA,EAAA,YAAA,cAGAA,EAAA,YAAA,cAGAA,EAAA,QAAA,SACD,CA3BD,CAAYA,IAAAA,EA2BX,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createClass as t,objectSpread2 as e,classCallCheck as n,defineProperty as i}from"../_virtual/_rollupPluginBabelHelpers.js";import{defaultAuthData as a}from"./auth-types.js";var s=function(){function s(){n(this,s),i(this,"authData",a),i(this,"listeners",new Map),i(this,"isInitialized",!1),this.initializeGlobalWindow(),this.setupEventListeners()}return t(s,[{key:"initializeGlobalWindow",value:function(){var t=this;"undefined"!=typeof window&&(window.__AUTH_MFE__={getAuthData:function(){return t.authData},setAuthData:function(e){return t.updateAuthData(e)},subscribe:function(e,n){return t.subscribe(e,n)},unsubscribe:function(e,n){return t.unsubscribe(e,n)},version:"1.0.0"},this.isInitialized=!0)}},{key:"setupEventListeners",value:function(){"undefined"!=typeof window&&(window.addEventListener("auth:request",this.handleAuthRequest.bind(this)),window.addEventListener("auth:login",this.handleLoginRequest.bind(this)),window.addEventListener("auth:logout",this.handleLogoutRequest.bind(this)))}},{key:"handleAuthRequest",value:function(t){var n=(t.detail||{}).microFrontendId;n&&window.dispatchEvent(new CustomEvent("auth:response",{detail:e(e({},this.authData),{},{microFrontendId:n,timestamp:Date.now()})}))}},{key:"handleLoginRequest",value:function(t){var e=(t.detail||{}).microFrontendId;window.dispatchEvent(new CustomEvent("auth:hostLogin",{detail:{microFrontendId:e,timestamp:Date.now()}}))}},{key:"handleLogoutRequest",value:function(t){var e=(t.detail||{}).microFrontendId;window.dispatchEvent(new CustomEvent("auth:hostLogout",{detail:{microFrontendId:e,timestamp:Date.now()}}))}},{key:"updateAuthData",value:function(t){var n=this;this.authData=e(e(e({},this.authData),t),{},{timestamp:Date.now()}),this.listeners.forEach((function(t,i){t.forEach((function(t){try{t(e(e({},n.authData),{},{microFrontendId:i}))}catch(t){console.error("Auth MFE: Error notifying ".concat(i,":"),t)}}))})),window.dispatchEvent(new CustomEvent("auth:stateChanged",{detail:this.authData}))}},{key:"subscribe",value:function(t,n){this.listeners.has(t)||this.listeners.set(t,[]),this.listeners.get(t).push(n),n(e(e({},this.authData),{},{microFrontendId:t}))}},{key:"unsubscribe",value:function(t,e){var n=this.listeners.get(t);if(n){var i=n.indexOf(e);i>-1&&n.splice(i,1),0===n.length&&this.listeners.delete(t)}}},{key:"getAuthData",value:function(){return e({},this.authData)}},{key:"isReady",value:function(){return this.isInitialized&&"undefined"!=typeof window&&!!window.__AUTH_MFE__}},{key:"getDebugInfo",value:function(){return{isInitialized:this.isInitialized,authData:this.authData,subscriberCount:Array.from(this.listeners.values()).reduce((function(t,e){return t+e.length}),0),subscribers:Array.from(this.listeners.keys()),windowAvailable:"undefined"!=typeof window,globalObjectAvailable:"undefined"!=typeof window&&!!window.__AUTH_MFE__}}}],[{key:"getInstance",value:function(){return s.instance||(s.instance=new s),s.instance}}])}();export{s as default};
|
|
2
|
+
//# sourceMappingURL=auth-mfe-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-mfe-manager.js","sources":["../../src/mfe-auth/auth-mfe-manager.ts"],"sourcesContent":["import { AuthEventData, AuthEventListener, defaultAuthData } from './auth-types'\r\n\r\n/**\r\n * Global Authentication Manager for Module Federation\r\n * Manages authentication state across host and micro frontend applications\r\n */\r\nclass AuthMFEManager {\r\n private static instance: AuthMFEManager\r\n private authData: AuthEventData = defaultAuthData\r\n private listeners: Map<string, AuthEventListener[]> = new Map()\r\n private isInitialized = false\r\n\r\n private constructor() {\r\n this.initializeGlobalWindow()\r\n this.setupEventListeners()\r\n }\r\n\r\n /**\r\n * Get singleton instance\r\n */\r\n static getInstance(): AuthMFEManager {\r\n if (!AuthMFEManager.instance) {\r\n AuthMFEManager.instance = new AuthMFEManager()\r\n }\r\n return AuthMFEManager.instance\r\n }\r\n\r\n /**\r\n * Initialize global window object for cross-component communication\r\n */\r\n private initializeGlobalWindow(): void {\r\n if (typeof window !== 'undefined') {\r\n ;(window as any).__AUTH_MFE__ = {\r\n getAuthData: () => this.authData,\r\n setAuthData: (data: AuthEventData) => this.updateAuthData(data),\r\n subscribe: (microFrontendId: string, callback: AuthEventListener) => this.subscribe(microFrontendId, callback),\r\n unsubscribe: (microFrontendId: string, callback: AuthEventListener) => this.unsubscribe(microFrontendId, callback),\r\n version: '1.0.0'\r\n }\r\n this.isInitialized = true\r\n }\r\n }\r\n\r\n /**\r\n * Setup event listeners for authentication events\r\n */\r\n private setupEventListeners(): void {\r\n if (typeof window === 'undefined') return\r\n\r\n // Listen for auth requests from micro frontends\r\n window.addEventListener('auth:request', this.handleAuthRequest.bind(this) as EventListener)\r\n\r\n // Listen for login/logout requests\r\n window.addEventListener('auth:login', this.handleLoginRequest.bind(this) as EventListener)\r\n window.addEventListener('auth:logout', this.handleLogoutRequest.bind(this) as EventListener)\r\n }\r\n\r\n /**\r\n * Handle authentication state requests\r\n */\r\n private handleAuthRequest(event: Event): void {\r\n const customEvent = event as CustomEvent\r\n const { microFrontendId } = customEvent.detail || {}\r\n\r\n if (microFrontendId) {\r\n // Send current auth state to requesting micro frontend\r\n window.dispatchEvent(\r\n new CustomEvent('auth:response', {\r\n detail: { ...this.authData, microFrontendId, timestamp: Date.now() }\r\n })\r\n )\r\n }\r\n }\r\n\r\n /**\r\n * Handle login requests from micro frontends\r\n */\r\n private handleLoginRequest(event: Event): void {\r\n const customEvent = event as CustomEvent\r\n const { microFrontendId } = customEvent.detail || {}\r\n\r\n // Dispatch to host application\r\n window.dispatchEvent(\r\n new CustomEvent('auth:hostLogin', {\r\n detail: { microFrontendId, timestamp: Date.now() }\r\n })\r\n )\r\n }\r\n\r\n /**\r\n * Handle logout requests from micro frontends\r\n */\r\n private handleLogoutRequest(event: Event): void {\r\n const customEvent = event as CustomEvent\r\n const { microFrontendId } = customEvent.detail || {}\r\n\r\n // Dispatch to host application\r\n window.dispatchEvent(\r\n new CustomEvent('auth:hostLogout', {\r\n detail: { microFrontendId, timestamp: Date.now() }\r\n })\r\n )\r\n }\r\n\r\n /**\r\n * Update authentication data and notify all subscribers\r\n */\r\n updateAuthData(newData: Partial<AuthEventData>): void {\r\n this.authData = { ...this.authData, ...newData, timestamp: Date.now() }\r\n\r\n // Notify all subscribed micro frontends\r\n this.listeners.forEach((callbacks, microFrontendId) => {\r\n callbacks.forEach((callback) => {\r\n try {\r\n callback({ ...this.authData, microFrontendId })\r\n } catch (error) {\r\n console.error(`Auth MFE: Error notifying ${microFrontendId}:`, error)\r\n }\r\n })\r\n })\r\n\r\n // Broadcast to all components via custom event\r\n window.dispatchEvent(new CustomEvent('auth:stateChanged', { detail: this.authData }))\r\n }\r\n\r\n /**\r\n * Subscribe to authentication changes\r\n */\r\n subscribe(microFrontendId: string, callback: AuthEventListener): void {\r\n if (!this.listeners.has(microFrontendId)) {\r\n this.listeners.set(microFrontendId, [])\r\n }\r\n this.listeners.get(microFrontendId)!.push(callback)\r\n\r\n // Immediately provide current auth state\r\n callback({ ...this.authData, microFrontendId })\r\n }\r\n\r\n /**\r\n * Unsubscribe from authentication changes\r\n */\r\n unsubscribe(microFrontendId: string, callback: AuthEventListener): void {\r\n const callbacks = this.listeners.get(microFrontendId)\r\n if (callbacks) {\r\n const index = callbacks.indexOf(callback)\r\n if (index > -1) {\r\n callbacks.splice(index, 1)\r\n }\r\n\r\n // Clean up empty listener arrays\r\n if (callbacks.length === 0) {\r\n this.listeners.delete(microFrontendId)\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get current authentication data\r\n */\r\n getAuthData(): AuthEventData {\r\n return { ...this.authData }\r\n }\r\n\r\n /**\r\n * Check if manager is initialized\r\n */\r\n isReady(): boolean {\r\n return this.isInitialized && typeof window !== 'undefined' && !!(window as any).__AUTH_MFE__\r\n }\r\n\r\n /**\r\n * Get debug information\r\n */\r\n getDebugInfo() {\r\n return {\r\n isInitialized: this.isInitialized,\r\n authData: this.authData,\r\n subscriberCount: Array.from(this.listeners.values()).reduce((sum, arr) => sum + arr.length, 0),\r\n subscribers: Array.from(this.listeners.keys()),\r\n windowAvailable: typeof window !== 'undefined',\r\n globalObjectAvailable: typeof window !== 'undefined' && !!(window as any).__AUTH_MFE__\r\n }\r\n }\r\n}\r\n\r\nexport default AuthMFEManager\r\n"],"names":["AuthMFEManager","_classCallCheck","_defineProperty","defaultAuthData","this","Map","initializeGlobalWindow","setupEventListeners","_createClass","key","value","_this","window","__AUTH_MFE__","getAuthData","authData","setAuthData","data","updateAuthData","subscribe","microFrontendId","callback","unsubscribe","version","isInitialized","addEventListener","handleAuthRequest","bind","handleLoginRequest","handleLogoutRequest","event","detail","dispatchEvent","CustomEvent","_objectSpread","timestamp","Date","now","newData","_this2","listeners","forEach","callbacks","error","console","concat","has","set","get","push","index","indexOf","splice","length","subscriberCount","Array","from","values","reduce","sum","arr","subscribers","keys","windowAvailable","globalObjectAvailable","instance"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{slicedToArray as e,asyncToGenerator as t,regenerator as n,objectSpread2 as r}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as a,Fragment as o,jsxs as i}from"react/jsx-runtime";import{useState as s,useCallback as u,useEffect as d}from"react";import{authService as c}from"partner-oidc-auth";import{AuthStatus as l}from"./auth-enums.js";import{defaultAuthData as v}from"./auth-types.js";import m from"./auth-mfe-manager.js";var f=function(i){var f=i.children,p=s(v),h=e(p,2);h[0];var g=h[1],w=s(!0),E=e(w,2);E[0];var U=E[1],A=m.getInstance(),b=u(t(n().m((function e(){var t,r,a,o,i;return n().w((function(e){for(;;)switch(e.n){case 0:return e.p=0,U(!0),e.n=1,c.isAuthenticated();case 1:if(!e.v){e.n=3;break}return e.n=2,c.getUser();case 2:t=e.v,r={status:l.AUTHENTICATED,email:(null==t?void 0:t.email)||"Unknown Email",displayName:(null==t?void 0:t.name)||"Unknown User",avatar:(null==t?void 0:t.picture)||"Unknown Avatar",timestamp:Date.now()},g(r),A.updateAuthData(r),e.n=4;break;case 3:a={status:l.UNAUTHENTICATED,timestamp:Date.now()},g(a),A.updateAuthData(a);case 4:e.n=6;break;case 5:e.p=5,i=e.v,console.error("Auth MFE: Failed to initialize authentication:",i),o={status:l.ERROR,error:i instanceof Error?i.message:"Authentication initialization failed",timestamp:Date.now()},g(o),A.updateAuthData(o);case 6:return e.p=6,U(!1),e.f(6);case 7:return e.a(2)}}),e,null,[[0,5,6,7]])}))),[A]),D=u(t(n().m((function e(){var t,a;return n().w((function(e){for(;;)switch(e.n){case 0:return e.p=0,g((function(e){return r(r({},e),{},{status:l.AUTHENTICATING,timestamp:Date.now()})})),e.n=1,c.signIn({returnUrl:c.getReturnUrl()});case 1:e.n=3;break;case 2:e.p=2,a=e.v,console.error("Auth MFE: Login failed:",a),t={status:l.ERROR,error:a instanceof Error?a.message:"Login failed",timestamp:Date.now()},g(t),A.updateAuthData(t);case 3:return e.a(2)}}),e,null,[[0,2]])}))),[A]),T=u(t(n().m((function e(){var t,r,a;return n().w((function(e){for(;;)switch(e.n){case 0:return e.p=0,e.n=1,c.signOut({returnUrl:c.getReturnUrl()});case 1:t={status:l.UNAUTHENTICATED,timestamp:Date.now()},g(t),A.updateAuthData(t),e.n=3;break;case 2:e.p=2,a=e.v,console.error("Auth MFE: Logout failed:",a),r={status:l.UNAUTHENTICATED,error:a instanceof Error?a.message:"Logout failed",timestamp:Date.now()},g(r),A.updateAuthData(r);case 3:return e.a(2)}}),e,null,[[0,2]])}))),[A]);return d((function(){b()}),[b]),d((function(){var e=function(){return D()},t=function(){return T()};return window.addEventListener("auth:hostLogin",e),window.addEventListener("auth:hostLogout",t),function(){window.removeEventListener("auth:hostLogin",e),window.removeEventListener("auth:hostLogout",t)}}),[D,T]),d((function(){var e=function(){b()};return c.userManager&&(c.userManager.events.addUserLoaded(e),c.userManager.events.addUserUnloaded(e),c.userManager.events.addUserSignedOut(e)),function(){c.userManager&&(c.userManager.events.removeUserLoaded(e),c.userManager.events.removeUserUnloaded(e),c.userManager.events.removeUserSignedOut(e))}}),[b]),a(o,{children:f})},p=function(t){var n,o,u,c=t.position,l=void 0===c?{bottom:"60px",left:"10px"}:c,v=s({}),f=e(v,2),p=f[0],h=f[1],g=m.getInstance();return d((function(){var e=function(){h(g.getDebugInfo())};e();var t=function(){return e()};window.addEventListener("auth:stateChanged",t);var n=setInterval(e,2e3);return function(){window.removeEventListener("auth:stateChanged",t),clearInterval(n)}}),[g]),"production"===process.env.NODE_ENV?null:i("div",{style:r({position:"fixed",background:"rgba(0, 0, 0, 0.9)",color:"white",padding:"10px",borderRadius:"5px",fontSize:"12px",fontFamily:"monospace",maxWidth:"300px",zIndex:9999},l),children:[a("div",{style:{fontWeight:"bold",marginBottom:"5px"},children:"🔐 Auth MFE Debug (Host)"}),i("div",{children:["Status: ",null===(n=p.authData)||void 0===n?void 0:n.status]}),i("div",{children:["User: ",(null===(o=p.authData)||void 0===o?void 0:o.displayName)||"None"]}),i("div",{children:["Subscribers: ",p.subscriberCount]}),i("div",{children:["MFEs: ",(null===(u=p.subscribers)||void 0===u?void 0:u.join(", "))||"None"]}),i("div",{children:["Global Ready: ",p.globalObjectAvailable?"✅":"❌"]}),i("div",{children:["Initialized: ",p.isInitialized?"✅":"❌"]})]})};export{p as AuthMFEProviderDebug,f as default};
|
|
2
|
+
//# sourceMappingURL=auth-mfe-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-mfe-provider.js","sources":["../../src/mfe-auth/auth-mfe-provider.tsx"],"sourcesContent":["import React, { useEffect, useState, useCallback, CSSProperties, FC } from 'react'\r\nimport { authService } from 'partner-oidc-auth'\r\nimport { AuthStatus } from './auth-enums'\r\nimport { AuthEventData, defaultAuthData } from './auth-types'\r\nimport AuthMFEManager from './auth-mfe-manager'\r\n\r\nexport interface AuthMFEProviderProps {\r\n children: React.ReactNode\r\n}\r\n\r\n/**\r\n * Authentication MFE Provider Component\r\n * Provides authentication state management for the host application\r\n * Handles communication with micro frontends via global window object\r\n */\r\nconst AuthMFEProvider: FC<AuthMFEProviderProps> = ({ children }) => {\r\n const [authData, setAuthData] = useState<AuthEventData>(defaultAuthData)\r\n const [isLoading, setIsLoading] = useState(true)\r\n\r\n // Get the auth manager instance\r\n const authManager = AuthMFEManager.getInstance()\r\n\r\n /**\r\n * Initialize authentication state from auth service\r\n */\r\n const initializeAuth = useCallback(async () => {\r\n try {\r\n setIsLoading(true)\r\n\r\n // Check if user is already authenticated\r\n const isAuthenticated = await authService.isAuthenticated()\r\n\r\n if (isAuthenticated) {\r\n const user = await authService.getUser()\r\n const newAuthData: AuthEventData = {\r\n status: AuthStatus.AUTHENTICATED,\r\n email: user?.email || 'Unknown Email',\r\n displayName: user?.name || 'Unknown User',\r\n avatar: user?.picture || 'Unknown Avatar',\r\n timestamp: Date.now()\r\n }\r\n\r\n setAuthData(newAuthData)\r\n authManager.updateAuthData(newAuthData)\r\n } else {\r\n const unauthenticatedData: AuthEventData = {\r\n status: AuthStatus.UNAUTHENTICATED,\r\n timestamp: Date.now()\r\n }\r\n\r\n setAuthData(unauthenticatedData)\r\n authManager.updateAuthData(unauthenticatedData)\r\n }\r\n } catch (error) {\r\n console.error('Auth MFE: Failed to initialize authentication:', error)\r\n const errorData: AuthEventData = {\r\n status: AuthStatus.ERROR,\r\n error: error instanceof Error ? error.message : 'Authentication initialization failed',\r\n timestamp: Date.now()\r\n }\r\n\r\n setAuthData(errorData)\r\n authManager.updateAuthData(errorData)\r\n } finally {\r\n setIsLoading(false)\r\n }\r\n }, [authManager])\r\n\r\n /**\r\n * Handle login requests from micro frontends\r\n */\r\n const handleLoginRequest = useCallback(async () => {\r\n try {\r\n setAuthData((prev) => ({\r\n ...prev,\r\n status: AuthStatus.AUTHENTICATING,\r\n timestamp: Date.now()\r\n }))\r\n\r\n await authService.signIn({ returnUrl: authService.getReturnUrl() })\r\n // Auth state will be updated by the redirect callback\r\n } catch (error) {\r\n console.error('Auth MFE: Login failed:', error)\r\n const errorData: AuthEventData = {\r\n status: AuthStatus.ERROR,\r\n error: error instanceof Error ? error.message : 'Login failed',\r\n timestamp: Date.now()\r\n }\r\n\r\n setAuthData(errorData)\r\n authManager.updateAuthData(errorData)\r\n }\r\n }, [authManager])\r\n\r\n /**\r\n * Handle logout requests from micro frontends\r\n */\r\n const handleLogoutRequest = useCallback(async () => {\r\n try {\r\n await authService.signOut({ returnUrl: authService.getReturnUrl() })\r\n\r\n const loggedOutData: AuthEventData = {\r\n status: AuthStatus.UNAUTHENTICATED,\r\n timestamp: Date.now()\r\n }\r\n\r\n setAuthData(loggedOutData)\r\n authManager.updateAuthData(loggedOutData)\r\n } catch (error) {\r\n console.error('Auth MFE: Logout failed:', error)\r\n // Even if logout fails, treat as logged out\r\n const loggedOutData: AuthEventData = {\r\n status: AuthStatus.UNAUTHENTICATED,\r\n error: error instanceof Error ? error.message : 'Logout failed',\r\n timestamp: Date.now()\r\n }\r\n\r\n setAuthData(loggedOutData)\r\n authManager.updateAuthData(loggedOutData)\r\n }\r\n }, [authManager])\r\n\r\n // Initialize authentication on mount\r\n useEffect(() => {\r\n initializeAuth()\r\n }, [initializeAuth])\r\n\r\n // Listen for host authentication events\r\n useEffect(() => {\r\n const handleHostLogin = () => handleLoginRequest()\r\n const handleHostLogout = () => handleLogoutRequest()\r\n\r\n window.addEventListener('auth:hostLogin', handleHostLogin)\r\n window.addEventListener('auth:hostLogout', handleHostLogout)\r\n\r\n return () => {\r\n window.removeEventListener('auth:hostLogin', handleHostLogin)\r\n window.removeEventListener('auth:hostLogout', handleHostLogout)\r\n }\r\n }, [handleLoginRequest, handleLogoutRequest])\r\n\r\n // Listen for auth service changes (e.g., from redirect callbacks)\r\n useEffect(() => {\r\n const handleAuthChange = () => {\r\n // Re-initialize auth state when auth service state changes\r\n initializeAuth()\r\n }\r\n\r\n // Listen for user loaded events from oidc-client\r\n if (authService.userManager) {\r\n authService.userManager.events.addUserLoaded(handleAuthChange)\r\n authService.userManager.events.addUserUnloaded(handleAuthChange)\r\n authService.userManager.events.addUserSignedOut(handleAuthChange)\r\n }\r\n\r\n return () => {\r\n if (authService.userManager) {\r\n authService.userManager.events.removeUserLoaded(handleAuthChange)\r\n authService.userManager.events.removeUserUnloaded(handleAuthChange)\r\n authService.userManager.events.removeUserSignedOut(handleAuthChange)\r\n }\r\n }\r\n }, [initializeAuth])\r\n\r\n return <>{children}</>\r\n}\r\n\r\nexport default AuthMFEProvider\r\n\r\nexport interface IAuthMFEProviderDebugProps {\r\n position?: Pick<CSSProperties, 'top' | 'left' | 'right' | 'bottom'>\r\n}\r\n\r\n/**\r\n * Debug component to show current authentication state\r\n * Only renders in development mode\r\n */\r\nexport const AuthMFEProviderDebug: FC<IAuthMFEProviderDebugProps> = (props) => {\r\n const { position = { bottom: '60px', left: '10px' } } = props\r\n const [debugInfo, setDebugInfo] = useState<any>({})\r\n const authManager = AuthMFEManager.getInstance()\r\n\r\n useEffect(() => {\r\n const updateDebugInfo = () => {\r\n setDebugInfo(authManager.getDebugInfo())\r\n }\r\n\r\n updateDebugInfo()\r\n\r\n // Update debug info when auth state changes\r\n const handleAuthChange = () => updateDebugInfo()\r\n window.addEventListener('auth:stateChanged', handleAuthChange)\r\n\r\n const interval = setInterval(updateDebugInfo, 2000) // Update every 2 seconds\r\n\r\n return () => {\r\n window.removeEventListener('auth:stateChanged', handleAuthChange)\r\n clearInterval(interval)\r\n }\r\n }, [authManager])\r\n\r\n // Only show in development\r\n if (process.env.NODE_ENV === 'production') {\r\n return null\r\n }\r\n\r\n return (\r\n <div\r\n style={{\r\n position: 'fixed',\r\n background: 'rgba(0, 0, 0, 0.9)',\r\n color: 'white',\r\n padding: '10px',\r\n borderRadius: '5px',\r\n fontSize: '12px',\r\n fontFamily: 'monospace',\r\n maxWidth: '300px',\r\n zIndex: 9999,\r\n ...position\r\n }}\r\n >\r\n <div style={{ fontWeight: 'bold', marginBottom: '5px' }}>🔐 Auth MFE Debug (Host)</div>\r\n <div>Status: {debugInfo.authData?.status}</div>\r\n <div>User: {debugInfo.authData?.displayName || 'None'}</div>\r\n <div>Subscribers: {debugInfo.subscriberCount}</div>\r\n <div>MFEs: {debugInfo.subscribers?.join(', ') || 'None'}</div>\r\n <div>Global Ready: {debugInfo.globalObjectAvailable ? '✅' : '❌'}</div>\r\n <div>Initialized: {debugInfo.isInitialized ? '✅' : '❌'}</div>\r\n </div>\r\n )\r\n}\r\n"],"names":["AuthMFEProvider","_ref","children","_useState","useState","defaultAuthData","_useState2","_slicedToArray","setAuthData","_useState3","_useState4","setIsLoading","authManager","AuthMFEManager","getInstance","initializeAuth","useCallback","_asyncToGenerator","_regenerator","m","_callee","user","newAuthData","unauthenticatedData","errorData","_t","w","_context","n","p","authService","isAuthenticated","v","getUser","status","AuthStatus","AUTHENTICATED","email","displayName","name","avatar","picture","timestamp","Date","now","updateAuthData","UNAUTHENTICATED","console","error","ERROR","Error","message","f","a","handleLoginRequest","_callee2","_t2","_context2","prev","_objectSpread","AUTHENTICATING","signIn","returnUrl","getReturnUrl","handleLogoutRequest","_callee3","loggedOutData","_loggedOutData","_t3","_context3","signOut","useEffect","handleHostLogin","handleHostLogout","window","addEventListener","removeEventListener","handleAuthChange","userManager","events","addUserLoaded","addUserUnloaded","addUserSignedOut","removeUserLoaded","removeUserUnloaded","removeUserSignedOut","_jsx","_Fragment","AuthMFEProviderDebug","props","_debugInfo$authData","_debugInfo$authData2","_debugInfo$subscriber","_props$position","position","bottom","left","_useState5","_useState6","debugInfo","setDebugInfo","updateDebugInfo","getDebugInfo","interval","setInterval","clearInterval","process","env","NODE_ENV","_jsxs","style","background","color","padding","borderRadius","fontSize","fontFamily","maxWidth","zIndex","fontWeight","marginBottom","authData","subscriberCount","subscribers","join","globalObjectAvailable","isInitialized"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-types.js","sources":["../../src/mfe-auth/auth-types.ts"],"sourcesContent":["import { AuthStatus } from './auth-enums'\r\n\r\n/**\r\n * Authentication Event Data Interface\r\n * Structure for communication between host and micro frontends\r\n */\r\nexport interface AuthEventData {\r\n /** Current authentication status */\r\n status: AuthStatus\r\n \r\n /** User display name (if authenticated) */\r\n displayName?: string\r\n \r\n /** User avatar URL (if authenticated) */\r\n avatar?: string\r\n \r\n /** Unique user identifier (if authenticated) */\r\n userId?: string\r\n \r\n /** User email address (if authenticated) */\r\n email?: string\r\n \r\n /** Additional user profile data */\r\n profile?: Record<string, any>\r\n \r\n /** Error message (if status is ERROR) */\r\n error?: string\r\n \r\n /** Timestamp of the authentication event */\r\n timestamp: number\r\n \r\n /** Source micro frontend identifier */\r\n microFrontendId?: string\r\n}\r\n\r\n/**\r\n * Authentication Event Listener Type\r\n */\r\nexport type AuthEventListener = (data: AuthEventData) => void\r\n\r\n/**\r\n * Default authentication data for unauthenticated state\r\n */\r\nexport const defaultAuthData: AuthEventData = {\r\n status: AuthStatus.UNAUTHENTICATED,\r\n timestamp: Date.now()\r\n}\r\n"],"names":["defaultAuthData","status","AuthStatus","UNAUTHENTICATED","timestamp","Date","now"],"mappings":"6CA2CO,IAAMA,EAAiC,CAC5CC,OAAQC,EAAWC,gBACnBC,UAAWC,KAAKC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export{AuthStatus,MicroFrontendType}from"./auth-enums.js";export{defaultAuthData}from"./auth-types.js";export{default as AuthMFEManager}from"./auth-mfe-manager.js";export{default as AuthMFEProvider,AuthMFEProviderDebug}from"./auth-mfe-provider.js";export{MicroFrontendAuth,MicroFrontendAuthConsumer,MicroFrontendAuthDebug,microFrontendAuthUtils,useMicroFrontendAuth,useMicroFrontendAuthActions,withMicroFrontendAuth}from"./micro-frontend-auth-hooks.js";
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createClass as t,objectSpread2 as e,asyncToGenerator as n,slicedToArray as i,regenerator as r,classCallCheck as o,defineProperty as s}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as a,Fragment as u,jsxs as d}from"react/jsx-runtime";import{useState as h,useEffect as c,useCallback as l}from"react";import{defaultAuthData as f}from"./auth-types.js";import{AuthStatus as m}from"./auth-enums.js";var v=function(){return t((function t(e){o(this,t),s(this,"authData",f),s(this,"listeners",[]),s(this,"retryCount",0),s(this,"isInitialized",!1),s(this,"initPromise",null),this.microFrontendId=e,this.initialize()}),[{key:"initialize",value:(a=n(r().m((function t(){return r().w((function(t){for(;;)switch(t.n){case 0:if(!this.initPromise){t.n=1;break}return t.a(2,this.initPromise);case 1:return this.initPromise=this.tryInitialize(),t.a(2,this.initPromise)}}),t,this)}))),function(){return a.apply(this,arguments)})},{key:"tryInitialize",value:(i=n(r().m((function t(){var e=this;return r().w((function(t){for(;;)if(0===t.n)return t.a(2,new Promise((function(t,n){var i=function(){"undefined"!=typeof window&&window.__AUTH_MFE__?(e.setupConnection(),e.isInitialized=!0,t()):e.retryCount<20?(e.retryCount++,setTimeout(i,500)):n(new Error("Failed to connect to global auth manager"))};i()})))}),t)}))),function(){return i.apply(this,arguments)})},{key:"setupConnection",value:function(){"undefined"!=typeof window&&window.__AUTH_MFE__&&(window.__AUTH_MFE__.subscribe(this.microFrontendId,this.handleAuthChange.bind(this)),window.addEventListener("auth:response",this.handleAuthResponse.bind(this)),window.addEventListener("auth:stateChanged",this.handleStateChanged.bind(this)),this.requestAuthState())}},{key:"handleAuthChange",value:function(t){this.authData=e(e({},t),{},{microFrontendId:this.microFrontendId}),this.notifyListeners()}},{key:"handleAuthResponse",value:function(t){var e=t.detail;e&&e.microFrontendId===this.microFrontendId&&(this.authData=e,this.notifyListeners())}},{key:"handleStateChanged",value:function(t){var n=t.detail;n&&(this.authData=e(e({},n),{},{microFrontendId:this.microFrontendId}),this.notifyListeners())}},{key:"requestAuthState",value:function(){window.dispatchEvent(new CustomEvent("auth:request",{detail:{microFrontendId:this.microFrontendId,timestamp:Date.now()}}))}},{key:"notifyListeners",value:function(){var t=this;this.listeners.forEach((function(e){try{e(t.authData)}catch(e){console.error("Auth MFE: Error in listener for ".concat(t.microFrontendId,":"),e)}}))}},{key:"subscribe",value:function(t){var e=this;return this.listeners.push(t),this.isInitialized&&t(this.authData),function(){var n=e.listeners.indexOf(t);n>-1&&e.listeners.splice(n,1)}}},{key:"getAuthData",value:function(){return e({},this.authData)}},{key:"requestLogin",value:function(){window.dispatchEvent(new CustomEvent("auth:login",{detail:{microFrontendId:this.microFrontendId,timestamp:Date.now()}}))}},{key:"requestLogout",value:function(){window.dispatchEvent(new CustomEvent("auth:logout",{detail:{microFrontendId:this.microFrontendId,timestamp:Date.now()}}))}},{key:"isConnected",value:function(){return this.isInitialized&&"undefined"!=typeof window&&!!window.__AUTH_MFE__}},{key:"getDebugInfo",value:function(){return{microFrontendId:this.microFrontendId,isInitialized:this.isInitialized,isConnected:this.isConnected(),retryCount:this.retryCount,authData:this.authData,listenerCount:this.listeners.length,globalAvailable:"undefined"!=typeof window&&!!window.__AUTH_MFE__}}},{key:"destroy",value:function(){this.listeners=[],"undefined"!=typeof window&&(window.removeEventListener("auth:response",this.handleAuthResponse.bind(this)),window.removeEventListener("auth:stateChanged",this.handleStateChanged.bind(this)))}}]);var i,a}(),p=new Map;function w(t){return p.has(t)||p.set(t,new v(t)),p.get(t)}function g(t){var e=h(f),n=i(e,2),r=n[0],o=n[1],s=h(!0),a=i(s,2),u=a[0],d=a[1],v=w(t);c((function(){var t=v.subscribe((function(t){o(t),d(!1)}));return function(){t()}}),[v]);var p=l((function(){v.requestLogin()}),[v]),g=l((function(){v.requestLogout()}),[v]);return{isAuthenticated:r.status===m.AUTHENTICATED,isLoading:u||r.status===m.LOADING,isAuthenticating:r.status===m.AUTHENTICATING,hasError:r.status===m.ERROR,displayName:r.displayName,email:r.email,userId:r.userId,avatar:r.avatar,profile:r.profile,status:r.status,error:r.error,timestamp:r.timestamp,login:p,logout:g,authData:r,isConnected:v.isConnected(),debugInfo:v.getDebugInfo()}}function y(t){var e=w(t);return{login:l((function(){e.requestLogin()}),[e]),logout:l((function(){e.requestLogout()}),[e])}}function I(t){var e=t.microFrontendId,n=t.children,i=g(e);return a(u,{children:n(i)})}function C(t,n){return function(i){var r=g(n);return a(t,e(e({},i),{},{auth:r}))}}var F={getCurrentAuth:function(t){return w(t).getAuthData()},requestLogin:function(t){w(t).requestLogin()},requestLogout:function(t){w(t).requestLogout()},createAuthInstance:function(t){return w(t)}},_=function(t){var n=t.microFrontendId,i=t.position,r=void 0===i?{bottom:"60px",left:"10px"}:i,o=g(n),s=o.debugInfo,a=o.authData,u=o.isConnected;return"production"===process.env.NODE_ENV?null:d("div",{style:e({position:"fixed",background:"rgba(0, 0, 0, 0.8)",color:"white",padding:"10px",borderRadius:"5px",fontSize:"12px",fontFamily:"monospace",maxWidth:"300px",zIndex:9998},r),children:[d("div",{style:{fontWeight:"bold",marginBottom:"5px"},children:["🔗 Auth MFE Debug (",n,")"]}),d("div",{children:["Status: ",a.status]}),d("div",{children:["User: ",a.displayName||"None"]}),d("div",{children:["Connected: ",u?"✅":"❌"]}),d("div",{children:["Initialized: ",s.isInitialized?"✅":"❌"]}),d("div",{children:["Retries: ",s.retryCount]}),d("div",{children:["Listeners: ",s.listenerCount]})]})};export{v as MicroFrontendAuth,I as MicroFrontendAuthConsumer,_ as MicroFrontendAuthDebug,F as microFrontendAuthUtils,g as useMicroFrontendAuth,y as useMicroFrontendAuthActions,C as withMicroFrontendAuth};
|
|
2
|
+
//# sourceMappingURL=micro-frontend-auth-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"micro-frontend-auth-hooks.js","sources":["../../src/mfe-auth/micro-frontend-auth-hooks.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, FC, CSSProperties } from 'react'\r\nimport { AuthEventData, AuthEventListener, defaultAuthData } from './auth-types'\r\nimport { AuthStatus } from './auth-enums'\r\n\r\n// Retry configuration for micro frontend initialization\r\nconst MAX_RETRIES = 20\r\nconst RETRY_DELAY = 500 // ms\r\n\r\n/**\r\n * Authentication Manager for Micro Frontends\r\n * Manages connection to global auth state via window object\r\n */\r\nclass MicroFrontendAuth {\r\n private microFrontendId: string\r\n private authData: AuthEventData = defaultAuthData\r\n private listeners: AuthEventListener[] = []\r\n private retryCount = 0\r\n private isInitialized = false\r\n private initPromise: Promise<void> | null = null\r\n\r\n constructor(microFrontendId: string) {\r\n this.microFrontendId = microFrontendId\r\n this.initialize()\r\n }\r\n\r\n /**\r\n * Initialize connection to global auth manager\r\n */\r\n private async initialize(): Promise<void> {\r\n if (this.initPromise) {\r\n return this.initPromise\r\n }\r\n\r\n this.initPromise = this.tryInitialize()\r\n return this.initPromise\r\n }\r\n\r\n private async tryInitialize(): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n const attemptConnection = () => {\r\n if (typeof window !== 'undefined' && (window as any).__AUTH_MFE__) {\r\n this.setupConnection()\r\n this.isInitialized = true\r\n resolve()\r\n } else if (this.retryCount < MAX_RETRIES) {\r\n this.retryCount++\r\n setTimeout(attemptConnection, RETRY_DELAY)\r\n } else {\r\n reject(new Error('Failed to connect to global auth manager'))\r\n }\r\n }\r\n\r\n attemptConnection()\r\n })\r\n }\r\n\r\n /**\r\n * Setup connection to global auth manager\r\n */\r\n private setupConnection(): void {\r\n if (typeof window === 'undefined' || !(window as any).__AUTH_MFE__) {\r\n return\r\n }\r\n\r\n // Subscribe to auth changes\r\n const globalAuth = (window as any).__AUTH_MFE__\r\n globalAuth.subscribe(this.microFrontendId, this.handleAuthChange.bind(this))\r\n\r\n // Listen for auth responses\r\n window.addEventListener('auth:response', this.handleAuthResponse.bind(this))\r\n window.addEventListener('auth:stateChanged', this.handleStateChanged.bind(this))\r\n\r\n // Request current auth state\r\n this.requestAuthState()\r\n }\r\n\r\n /**\r\n * Handle authentication state changes from global manager\r\n */\r\n private handleAuthChange(data: AuthEventData): void {\r\n this.authData = { ...data, microFrontendId: this.microFrontendId }\r\n this.notifyListeners()\r\n }\r\n\r\n /**\r\n * Handle auth response events\r\n */\r\n private handleAuthResponse(event: Event): void {\r\n const customEvent = event as CustomEvent\r\n const data = customEvent.detail\r\n\r\n if (data && data.microFrontendId === this.microFrontendId) {\r\n this.authData = data\r\n this.notifyListeners()\r\n }\r\n }\r\n\r\n /**\r\n * Handle global auth state changes\r\n */\r\n private handleStateChanged(event: Event): void {\r\n const customEvent = event as CustomEvent\r\n const data = customEvent.detail\r\n\r\n if (data) {\r\n this.authData = { ...data, microFrontendId: this.microFrontendId }\r\n this.notifyListeners()\r\n }\r\n }\r\n\r\n /**\r\n * Request current authentication state\r\n */\r\n private requestAuthState(): void {\r\n window.dispatchEvent(\r\n new CustomEvent('auth:request', {\r\n detail: { microFrontendId: this.microFrontendId, timestamp: Date.now() }\r\n })\r\n )\r\n }\r\n\r\n /**\r\n * Notify all listeners of auth changes\r\n */\r\n private notifyListeners(): void {\r\n this.listeners.forEach((listener) => {\r\n try {\r\n listener(this.authData)\r\n } catch (error) {\r\n console.error(`Auth MFE: Error in listener for ${this.microFrontendId}:`, error)\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Subscribe to authentication changes\r\n */\r\n subscribe(listener: AuthEventListener): () => void {\r\n this.listeners.push(listener)\r\n\r\n // Immediately provide current auth state if available\r\n if (this.isInitialized) {\r\n listener(this.authData)\r\n }\r\n\r\n // Return unsubscribe function\r\n return () => {\r\n const index = this.listeners.indexOf(listener)\r\n if (index > -1) {\r\n this.listeners.splice(index, 1)\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get current authentication data\r\n */\r\n getAuthData(): AuthEventData {\r\n return { ...this.authData }\r\n }\r\n\r\n /**\r\n * Request login from host application\r\n */\r\n requestLogin(): void {\r\n window.dispatchEvent(\r\n new CustomEvent('auth:login', {\r\n detail: { microFrontendId: this.microFrontendId, timestamp: Date.now() }\r\n })\r\n )\r\n }\r\n\r\n /**\r\n * Request logout from host application\r\n */\r\n requestLogout(): void {\r\n window.dispatchEvent(\r\n new CustomEvent('auth:logout', {\r\n detail: { microFrontendId: this.microFrontendId, timestamp: Date.now() }\r\n })\r\n )\r\n }\r\n\r\n /**\r\n * Check if connected to global auth manager\r\n */\r\n isConnected(): boolean {\r\n return this.isInitialized && typeof window !== 'undefined' && !!(window as any).__AUTH_MFE__\r\n }\r\n\r\n /**\r\n * Get debug information\r\n */\r\n getDebugInfo() {\r\n return {\r\n microFrontendId: this.microFrontendId,\r\n isInitialized: this.isInitialized,\r\n isConnected: this.isConnected(),\r\n retryCount: this.retryCount,\r\n authData: this.authData,\r\n listenerCount: this.listeners.length,\r\n globalAvailable: typeof window !== 'undefined' && !!(window as any).__AUTH_MFE__\r\n }\r\n }\r\n\r\n /**\r\n * Cleanup when component unmounts\r\n */\r\n destroy(): void {\r\n this.listeners = []\r\n if (typeof window !== 'undefined') {\r\n window.removeEventListener('auth:response', this.handleAuthResponse.bind(this))\r\n window.removeEventListener('auth:stateChanged', this.handleStateChanged.bind(this))\r\n }\r\n }\r\n}\r\n\r\n// Cache for auth instances to prevent multiple instances for same ID\r\nconst authInstances = new Map<string, MicroFrontendAuth>()\r\n\r\n/**\r\n * Get or create auth instance for micro frontend\r\n */\r\nfunction getAuthInstance(microFrontendId: string): MicroFrontendAuth {\r\n if (!authInstances.has(microFrontendId)) {\r\n authInstances.set(microFrontendId, new MicroFrontendAuth(microFrontendId))\r\n }\r\n return authInstances.get(microFrontendId)!\r\n}\r\n\r\n/**\r\n * React Hook for Micro Frontend Authentication\r\n * Primary hook for function components\r\n */\r\nexport function useMicroFrontendAuth(microFrontendId: string) {\r\n const [authData, setAuthData] = useState<AuthEventData>(defaultAuthData)\r\n const [isLoading, setIsLoading] = useState(true)\r\n\r\n const authInstance = getAuthInstance(microFrontendId)\r\n\r\n useEffect(() => {\r\n const unsubscribe = authInstance.subscribe((data) => {\r\n setAuthData(data)\r\n setIsLoading(false)\r\n })\r\n\r\n return () => {\r\n unsubscribe()\r\n }\r\n }, [authInstance])\r\n\r\n const login = useCallback(() => {\r\n authInstance.requestLogin()\r\n }, [authInstance])\r\n\r\n const logout = useCallback(() => {\r\n authInstance.requestLogout()\r\n }, [authInstance])\r\n\r\n return {\r\n // Auth status\r\n isAuthenticated: authData.status === AuthStatus.AUTHENTICATED,\r\n isLoading: isLoading || authData.status === AuthStatus.LOADING,\r\n isAuthenticating: authData.status === AuthStatus.AUTHENTICATING,\r\n hasError: authData.status === AuthStatus.ERROR,\r\n\r\n // User data\r\n displayName: authData.displayName,\r\n email: authData.email,\r\n userId: authData.userId,\r\n avatar: authData.avatar,\r\n profile: authData.profile,\r\n\r\n // Status and error\r\n status: authData.status,\r\n error: authData.error,\r\n timestamp: authData.timestamp,\r\n\r\n // Actions\r\n login,\r\n logout,\r\n\r\n // Raw data and debug\r\n authData,\r\n isConnected: authInstance.isConnected(),\r\n debugInfo: authInstance.getDebugInfo()\r\n }\r\n}\r\n\r\n/**\r\n * React Hook for Authentication Actions Only\r\n * Lightweight hook for components that only need actions\r\n */\r\nexport function useMicroFrontendAuthActions(microFrontendId: string) {\r\n const authInstance = getAuthInstance(microFrontendId)\r\n\r\n const login = useCallback(() => {\r\n authInstance.requestLogin()\r\n }, [authInstance])\r\n\r\n const logout = useCallback(() => {\r\n authInstance.requestLogout()\r\n }, [authInstance])\r\n\r\n return { login, logout }\r\n}\r\n\r\n/**\r\n * Consumer Component for Class Components or Render Props Pattern\r\n */\r\ninterface MicroFrontendAuthConsumerProps {\r\n microFrontendId: string\r\n children: (authData: ReturnType<typeof useMicroFrontendAuth>) => React.ReactNode\r\n}\r\n\r\nexport function MicroFrontendAuthConsumer({ microFrontendId, children }: MicroFrontendAuthConsumerProps) {\r\n const authData = useMicroFrontendAuth(microFrontendId)\r\n return <>{children(authData)}</>\r\n}\r\n\r\n/**\r\n * Higher-Order Component for Class Components\r\n */\r\nexport function withMicroFrontendAuth<P extends object>(\r\n Component: React.ComponentType<P & { auth: ReturnType<typeof useMicroFrontendAuth> }>,\r\n microFrontendId: string\r\n) {\r\n return function WrappedComponent(props: P) {\r\n const auth = useMicroFrontendAuth(microFrontendId)\r\n return <Component {...props} auth={auth} />\r\n }\r\n}\r\n\r\n/**\r\n * Utility functions for non-React contexts\r\n */\r\nexport const microFrontendAuthUtils = {\r\n /**\r\n * Get current auth state synchronously\r\n */\r\n getCurrentAuth: (microFrontendId: string): AuthEventData => {\r\n const authInstance = getAuthInstance(microFrontendId)\r\n return authInstance.getAuthData()\r\n },\r\n\r\n /**\r\n * Request login from any context\r\n */\r\n requestLogin: (microFrontendId: string): void => {\r\n const authInstance = getAuthInstance(microFrontendId)\r\n authInstance.requestLogin()\r\n },\r\n\r\n /**\r\n * Request logout from any context\r\n */\r\n requestLogout: (microFrontendId: string): void => {\r\n const authInstance = getAuthInstance(microFrontendId)\r\n authInstance.requestLogout()\r\n },\r\n\r\n /**\r\n * Create or get auth instance\r\n */\r\n createAuthInstance: (microFrontendId: string): MicroFrontendAuth => {\r\n return getAuthInstance(microFrontendId)\r\n }\r\n}\r\n\r\n/**\r\n * Debug component for micro frontends\r\n */\r\ninterface MicroFrontendAuthDebugProps {\r\n microFrontendId: string\r\n position?: Pick<CSSProperties, 'top' | 'left' | 'right' | 'bottom'>\r\n}\r\n\r\nexport const MicroFrontendAuthDebug: FC<MicroFrontendAuthDebugProps> = ({ microFrontendId, position = { bottom: '60px', left: '10px' } }) => {\r\n const { debugInfo, authData, isConnected } = useMicroFrontendAuth(microFrontendId)\r\n\r\n // Only show in development\r\n if (process.env.NODE_ENV === 'production') {\r\n return null\r\n }\r\n\r\n return (\r\n <div\r\n style={{\r\n position: 'fixed',\r\n background: 'rgba(0, 0, 0, 0.8)',\r\n color: 'white',\r\n padding: '10px',\r\n borderRadius: '5px',\r\n fontSize: '12px',\r\n fontFamily: 'monospace',\r\n maxWidth: '300px',\r\n zIndex: 9998,\r\n ...position\r\n }}\r\n >\r\n <div style={{ fontWeight: 'bold', marginBottom: '5px' }}>🔗 Auth MFE Debug ({microFrontendId})</div>\r\n <div>Status: {authData.status}</div>\r\n <div>User: {authData.displayName || 'None'}</div>\r\n <div>Connected: {isConnected ? '✅' : '❌'}</div>\r\n <div>Initialized: {debugInfo.isInitialized ? '✅' : '❌'}</div>\r\n <div>Retries: {debugInfo.retryCount}</div>\r\n <div>Listeners: {debugInfo.listenerCount}</div>\r\n </div>\r\n )\r\n}\r\n\r\nexport { MicroFrontendAuth }\r\n"],"names":["MicroFrontendAuth","_createClass","microFrontendId","_classCallCheck","_defineProperty","defaultAuthData","this","initialize","key","value","_initialize","_asyncToGenerator","_regenerator","m","_callee","w","_context","n","initPromise","a","tryInitialize","apply","arguments","_tryInitialize","_callee2","_this","_context2","Promise","resolve","reject","attemptConnection","window","__AUTH_MFE__","setupConnection","isInitialized","retryCount","setTimeout","Error","subscribe","handleAuthChange","bind","addEventListener","handleAuthResponse","handleStateChanged","requestAuthState","data","authData","_objectSpread","notifyListeners","event","detail","dispatchEvent","CustomEvent","timestamp","Date","now","_this2","listeners","forEach","listener","error","console","concat","_this3","push","index","indexOf","splice","isConnected","listenerCount","length","globalAvailable","removeEventListener","authInstances","Map","getAuthInstance","has","set","get","useMicroFrontendAuth","_useState","useState","_useState2","_slicedToArray","setAuthData","_useState3","_useState4","isLoading","setIsLoading","authInstance","useEffect","unsubscribe","login","useCallback","requestLogin","logout","requestLogout","isAuthenticated","status","AuthStatus","AUTHENTICATED","LOADING","isAuthenticating","AUTHENTICATING","hasError","ERROR","displayName","email","userId","avatar","profile","debugInfo","getDebugInfo","useMicroFrontendAuthActions","MicroFrontendAuthConsumer","_ref","children","_jsx","withMicroFrontendAuth","Component","props","auth","microFrontendAuthUtils","getCurrentAuth","getAuthData","createAuthInstance","MicroFrontendAuthDebug","_ref2","_ref2$position","position","bottom","left","_useMicroFrontendAuth","process","env","NODE_ENV","_jsxs","style","background","color","padding","borderRadius","fontSize","fontFamily","maxWidth","zIndex","fontWeight","marginBottom"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{slicedToArray as e,objectSpread2 as r,toConsumableArray as n}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as t,jsx as i}from"react/jsx-runtime";import{useState as o,useEffect as a}from"react";var l=function(l){var s=l.style,c=o([]),d=e(c,2),f=d[0],m=d[1];return a((function(){var e=function(e){var r=e.detail,t=r.primaryHref,i=r.secondaryHref,o=r.internal,a=r.options;m((function(e){return[{primaryHref:t,secondaryHref:i,internal:o,options:a}].concat(n(e.slice(0,9)))}))};return globalThis.addEventListener("mfe:navigate",e),function(){return globalThis.removeEventListener("mfe:navigate",e)}}),[]),t("div",{style:r({position:"fixed",background:"rgba(0,0,0,0.8)",color:"#fff",padding:12,borderRadius:8,fontSize:12,zIndex:9999,maxWidth:320,maxHeight:240,overflowY:"auto",boxShadow:"0 2px 8px rgba(0,0,0,0.2)"},null!=s?s:{bottom:16,left:16}),children:[i("div",{style:{fontWeight:"bold",marginBottom:8},children:"MFE Navigate Debug"}),0===f.length?i("div",{style:{opacity:.7},children:"No navigation events"}):i("ul",{style:{margin:0,padding:0,listStyle:"none"},children:f.map((function(e,r){var n;return t("li",{style:{marginBottom:4},children:[i("span",{style:{color:"#90ee90"},children:e.primaryHref}),e.secondaryHref&&t("span",{style:{color:"#ffa500",marginLeft:8},children:["→ ",e.secondaryHref]}),e.internal&&i("span",{style:{color:"#87ceeb",marginLeft:8},children:"[internal]"}),(null===(n=e.options)||void 0===n?void 0:n.target)&&t("span",{style:{color:"#ffb6c1",marginLeft:8},children:["(",e.options.target,")"]})]},r)}))})]})};export{l as MfeNavigateDebugPanel};
|
|
2
|
+
//# sourceMappingURL=mfe-navigate.debug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mfe-navigate.debug.js","sources":["../../src/mfe-navigate/mfe-navigate.debug.tsx"],"sourcesContent":["import { useEffect, useState } from 'react'\r\nimport type { FC } from 'react'\r\nimport type { MfeNavigate } from './types'\r\n\r\nconst MAX_EVENTS = 10\r\n\r\nexport const MfeNavigateDebugPanel: FC<{ style?: React.CSSProperties }> = ({ style }) => {\r\n const [debugEvents, setDebugEvents] = useState<MfeNavigate[]>([])\r\n\r\n useEffect(() => {\r\n const handleNavigate = (e: CustomEvent) => {\r\n const { primaryHref, secondaryHref, internal, options } = e.detail as MfeNavigate\r\n setDebugEvents((events) => [{ primaryHref, secondaryHref, internal, options }, ...events.slice(0, MAX_EVENTS - 1)])\r\n }\r\n globalThis.addEventListener('mfe:navigate', handleNavigate as EventListener)\r\n return () => globalThis.removeEventListener('mfe:navigate', handleNavigate as EventListener)\r\n }, [])\r\n\r\n return (\r\n <div\r\n style={{\r\n position: 'fixed',\r\n background: 'rgba(0,0,0,0.8)',\r\n color: '#fff',\r\n padding: 12,\r\n borderRadius: 8,\r\n fontSize: 12,\r\n zIndex: 9999,\r\n maxWidth: 320,\r\n maxHeight: 240,\r\n overflowY: 'auto',\r\n boxShadow: '0 2px 8px rgba(0,0,0,0.2)',\r\n ...(style ?? { bottom: 16, left: 16 })\r\n }}\r\n >\r\n <div style={{ fontWeight: 'bold', marginBottom: 8 }}>MFE Navigate Debug</div>\r\n {debugEvents.length === 0 ? (\r\n <div style={{ opacity: 0.7 }}>No navigation events</div>\r\n ) : (\r\n <ul style={{ margin: 0, padding: 0, listStyle: 'none' }}>\r\n {debugEvents.map((ev, idx) => (\r\n <li key={idx} style={{ marginBottom: 4 }}>\r\n <span style={{ color: '#90ee90' }}>{ev.primaryHref}</span>\r\n {ev.secondaryHref && <span style={{ color: '#ffa500', marginLeft: 8 }}>→ {ev.secondaryHref}</span>}\r\n {ev.internal && <span style={{ color: '#87ceeb', marginLeft: 8 }}>[internal]</span>}\r\n {ev.options?.target && <span style={{ color: '#ffb6c1', marginLeft: 8 }}>({ev.options.target})</span>}\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n </div>\r\n )\r\n}\r\n"],"names":["MfeNavigateDebugPanel","_ref","style","_useState","useState","_useState2","_slicedToArray","debugEvents","setDebugEvents","useEffect","handleNavigate","e","_e$detail","detail","primaryHref","secondaryHref","internal","options","events","concat","_toConsumableArray","slice","MAX_EVENTS","globalThis","addEventListener","removeEventListener","_jsxs","_objectSpread","position","background","color","padding","borderRadius","fontSize","zIndex","maxWidth","maxHeight","overflowY","boxShadow","bottom","left","children","_jsx","fontWeight","marginBottom","length","opacity","margin","listStyle","map","ev","idx","_ev$options","marginLeft","target"],"mappings":"qNAIA,IAEaA,EAA6D,SAAxCC,GAAsD,IAAXC,EAAKD,EAALC,MAC3EC,EAAsCC,EAAwB,IAAGC,EAAAC,EAAAH,EAAA,GAA1DI,EAAWF,EAAA,GAAEG,EAAcH,EAAA,GAWlC,OATAI,GAAU,WACR,IAAMC,EAAiB,SAACC,GACtB,IAAAC,EAA0DD,EAAEE,OAApDC,EAAWF,EAAXE,YAAaC,EAAaH,EAAbG,cAAeC,EAAQJ,EAARI,SAAUC,EAAOL,EAAPK,QAC9CT,GAAe,SAACU,GAAM,MAAM,CAAA,CAAEJ,YAAAA,EAAaC,cAAAA,EAAeC,SAAAA,EAAUC,QAAAA,IAASE,OAAAC,EAAKF,EAAOG,MAAM,EAAGC,IAAe,GAClH,EAED,OADAC,WAAWC,iBAAiB,eAAgBd,GACrC,WAAA,OAAMa,WAAWE,oBAAoB,eAAgBf,EAAgC,CAC7F,GAAE,IAGDgB,EACE,MAAA,CAAAxB,MAAKyB,EAAA,CACHC,SAAU,QACVC,WAAY,kBACZC,MAAO,OACPC,QAAS,GACTC,aAAc,EACdC,SAAU,GACVC,OAAQ,KACRC,SAAU,IACVC,UAAW,IACXC,UAAW,OACXC,UAAW,6BACPpC,QAAAA,EAAS,CAAEqC,OAAQ,GAAIC,KAAM,KAClCC,SAAA,CAEDC,SAAKxC,MAAO,CAAEyC,WAAY,OAAQC,aAAc,GAAGH,SAAA,uBAC3B,IAAvBlC,EAAYsC,OACXH,EAAK,MAAA,CAAAxC,MAAO,CAAE4C,QAAS,IAAiCL,SAAA,yBAExDC,EAAI,KAAA,CAAAxC,MAAO,CAAE6C,OAAQ,EAAGhB,QAAS,EAAGiB,UAAW,QAAQP,SACpDlC,EAAY0C,KAAI,SAACC,EAAIC,GAAG,IAAAC,EAAA,OACvB1B,EAAA,KAAA,CAAcxB,MAAO,CAAE0C,aAAc,GAAGH,SAAA,CACtCC,UAAMxC,MAAO,CAAE4B,MAAO,oBAAcoB,EAAGpC,cACtCoC,EAAGnC,eAAiBW,UAAMxB,MAAO,CAAE4B,MAAO,UAAWuB,WAAY,GAAQZ,SAAA,CAAA,KAAAS,EAAGnC,iBAC5EmC,EAAGlC,UAAY0B,EAAM,OAAA,CAAAxC,MAAO,CAAE4B,MAAO,UAAWuB,WAAY,GAAGZ,SAAA,gBACrD,QAAVW,EAAAF,EAAGjC,eAAO,IAAAmC,OAAA,EAAVA,EAAYE,SAAU5B,UAAMxB,MAAO,CAAE4B,MAAO,UAAWuB,WAAY,GAAOZ,SAAA,CAAA,IAAAS,EAAGjC,QAAQqC,OAAM,SAJrFH,EAMV,QAKX"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{objectWithoutProperties as e,objectSpread2 as r}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as n}from"react/jsx-runtime";var t=["internal","primaryHref","secondaryHref","onClick"],a=function(){return{navigate:function(e){globalThis.dispatchEvent(new CustomEvent("mfe:navigate",{detail:e}))}}},i=function(i){var o=i.internal,f=i.primaryHref,l=i.secondaryHref,u=i.onClick,c=e(i,t),p=a().navigate;return n("a",r(r({},c),{},{href:f,onClick:function(e){if(u&&u(e),!e.defaultPrevented)return o&&l?(e.preventDefault(),void p({primaryHref:f,secondaryHref:l,internal:o})):void 0}}))};export{i as MfeLink,a as useMfeNavigate};
|
|
2
|
+
//# sourceMappingURL=mfe-navigate.remote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mfe-navigate.remote.js","sources":["../../src/mfe-navigate/mfe-navigate.remote.tsx"],"sourcesContent":["import type { AnchorHTMLAttributes, FC } from 'react'\r\nimport type { MfeNavigate } from './types'\r\n\r\nexport const useMfeNavigate = () => {\r\n const navigate = (params: MfeNavigate) => {\r\n globalThis.dispatchEvent(new CustomEvent('mfe:navigate', { detail: params }))\r\n }\r\n return { navigate }\r\n}\r\n\r\nexport interface IMfeLinkProps extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> {\r\n internal?: boolean\r\n primaryHref: string\r\n secondaryHref?: string\r\n}\r\n\r\nexport const MfeLink: FC<IMfeLinkProps> = (props) => {\r\n const { internal, primaryHref, secondaryHref, onClick, ...rest } = props\r\n const { navigate } = useMfeNavigate()\r\n\r\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\r\n if (onClick) onClick(e)\r\n if (e.defaultPrevented) return\r\n if (internal && secondaryHref) {\r\n e.preventDefault()\r\n navigate({ primaryHref, secondaryHref, internal })\r\n return\r\n }\r\n // If not internal or no secondaryHref, let the anchor tag handle it\r\n }\r\n\r\n return <a {...rest} href={primaryHref} onClick={handleClick} />\r\n}\r\n"],"names":["useMfeNavigate","navigate","params","globalThis","dispatchEvent","CustomEvent","detail","MfeLink","props","internal","primaryHref","secondaryHref","onClick","rest","_objectWithoutProperties","_excluded","_jsx","_objectSpread","href","e","defaultPrevented","preventDefault"],"mappings":"yMAGaA,EAAiB,WAI5B,MAAO,CAAEC,SAHQ,SAACC,GAChBC,WAAWC,cAAc,IAAIC,YAAY,eAAgB,CAAEC,OAAQJ,IACpE,EAEH,EAQaK,EAA6B,SAACC,GACzC,IAAQC,EAA2DD,EAA3DC,SAAUC,EAAiDF,EAAjDE,YAAaC,EAAoCH,EAApCG,cAAeC,EAAqBJ,EAArBI,QAAYC,EAAIC,EAAKN,EAAKO,GAChEd,EAAaD,IAAbC,SAaR,OAAOe,EAAA,IAAAC,EAAAA,KAAOJ,GAAI,GAAA,CAAEK,KAAMR,EAAaE,QAXnB,SAACO,GAEnB,GADIP,GAASA,EAAQO,IACjBA,EAAEC,iBACN,OAAIX,GAAYE,GACdQ,EAAEE,sBACFpB,EAAS,CAAES,YAAAA,EAAaC,cAAAA,EAAeF,SAAAA,UAFzC,CAMD,IAGH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sources":["../../../src/mfe-navigate/nextjs/provider.tsx"],"sourcesContent":["import { FC } from 'react'\r\n\r\nexport const MfeNavigateNextProvider: FC = () => {\r\n return <>Next Provider</>\r\n}\r\n"],"names":["MfeNavigateNextProvider","_jsx"],"mappings":"0DAEaA,EAA8B,WACzC,OAAOC,+BACT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as e,Fragment as r}from"react/jsx-runtime";import{useEffect as a}from"react";var n=function(){var n=function(){try{return require("react-router-dom").useNavigate()}catch(e){return console.warn("react-router-dom not available, using fallback"),function(){console.warn("Navigate function is not available. Please ensure react-router-dom is installed.")}}}();return a((function(){var e=function(e){var r=e.detail,a=r.primaryHref,t=r.secondaryHref,o=r.options;if(a){var i=t||a||"/";"_blank"!==(null==o?void 0:o.target)?n(i,o):globalThis.open("".concat(i),"_blank")}};return globalThis.addEventListener("mfe:navigate",e),function(){return globalThis.removeEventListener("mfe:navigate",e)}}),[n]),e(r,{})};export{n as MfeNavigateReactProvider};
|
|
2
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sources":["../../../src/mfe-navigate/react/provider.tsx"],"sourcesContent":["import { useEffect } from 'react'\r\nimport type { FC } from 'react'\r\nimport type { MfeNavigate } from '../types'\r\n\r\n// Define types to avoid direct imports\r\nexport type NavigateFunction = (path: string, options?: any) => void\r\n\r\n// Use hook-style functions that don't directly import from react-router-dom\r\nfunction useReactNavigate(): NavigateFunction {\r\n try {\r\n // @ts-ignore - Ignore TS errors during build time\r\n return require('react-router-dom').useNavigate()\r\n } catch (error) {\r\n console.warn('react-router-dom not available, using fallback')\r\n // Provide fallback implementation\r\n return () => {\r\n console.warn('Navigate function is not available. Please ensure react-router-dom is installed.')\r\n }\r\n }\r\n}\r\n\r\nexport const MfeNavigateReactProvider: FC = () => {\r\n const navigate = useReactNavigate()\r\n\r\n useEffect(() => {\r\n const handleNavigate = (e: CustomEvent) => {\r\n const { primaryHref, secondaryHref, options } = e.detail as MfeNavigate\r\n if (!primaryHref) return\r\n // Navigate to secondaryHref if available, otherwise fallback to primaryHref\r\n const url = secondaryHref || primaryHref || '/'\r\n if (options?.target === '_blank') {\r\n globalThis.open(`${url}`, '_blank')\r\n return\r\n }\r\n navigate(url, options)\r\n }\r\n globalThis.addEventListener('mfe:navigate', handleNavigate as EventListener)\r\n return () => globalThis.removeEventListener('mfe:navigate', handleNavigate as EventListener)\r\n }, [navigate])\r\n return <></>\r\n}\r\n"],"names":["MfeNavigateReactProvider","navigate","require","useNavigate","error","console","warn","useReactNavigate","useEffect","handleNavigate","e","_e$detail","detail","primaryHref","secondaryHref","options","url","target","globalThis","open","concat","addEventListener","removeEventListener","_jsx"],"mappings":"4FAqBaA,EAA+B,WAC1C,IAAMC,EAdR,WACE,IAEE,OAAOC,QAAQ,oBAAoBC,aACpC,CAAC,MAAOC,GAGP,OAFAC,QAAQC,KAAK,kDAEN,WACLD,QAAQC,KAAK,mFACd,CACF,CACH,CAGmBC,GAiBjB,OAfAC,GAAU,WACR,IAAMC,EAAiB,SAACC,GACtB,IAAAC,EAAgDD,EAAEE,OAA1CC,EAAWF,EAAXE,YAAaC,EAAaH,EAAbG,cAAeC,EAAOJ,EAAPI,QACpC,GAAKF,EAAL,CAEA,IAAMG,EAAMF,GAAiBD,GAAe,IACpB,YAApBE,aAAO,EAAPA,EAASE,QAIbhB,EAASe,EAAKD,GAHZG,WAAWC,KAAIC,GAAAA,OAAIJ,GAAO,SAJV,CAQnB,EAED,OADAE,WAAWG,iBAAiB,eAAgBZ,GACrC,WAAA,OAAMS,WAAWI,oBAAoB,eAAgBb,EAAgC,CAC9F,GAAG,CAACR,IACGsB,OACT"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{inherits as r,createClass as t,
|
|
1
|
+
import{inherits as r,createClass as t,objectSpread2 as e,classCallCheck as o,callSuper as n,defineProperty as a}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as i,Fragment as s}from"react/jsx-runtime";import{Component as u}from"react";import{ELazyStatus as l}from"./types.js";import c from"./ui.error-page.js";var p=function(r){var t=r.children;return i(s,{children:t})},d={LazySpinner:p},f=function(s,p){return function(){function f(r){var t;return o(this,f),t=n(this,f,[r]),a(t,"initialParam",(function(){var r,e,o,n=null!==(r=null==p?void 0:p.param)&&void 0!==r?r:{},a=null!==(e=null===(o=t.props)||void 0===o?void 0:o.param)&&void 0!==e?e:{};return Object.assign({},n,a)})),a(t,"componentDidMount",(function(){if(t.props.fetchData){var r,e=t.initialParam();null===(r=t.tokenSources)||void 0===r||r.abort(),t.tokenSources=new AbortController,t.fetchSource=t.props.fetchData(e,t.tokenSources.signal)}})),t.optionsMerge=Object.assign({},d,p),t}return r(f,u),t(f,[{key:"render",value:function(){var r=this.optionsMerge;switch(this.props.status){case l.Loading:case l.Loaded:return i(r.LazySpinner,{loading:this.props.status===l.Loading,children:i(s,e({},this.props))});case l.Error:var t=r.ErrorScreen||c;return i(t,{});default:return i("div",{})}}},{key:"componentWillUnmount",value:function(){var r,t;null===(r=this.tokenSources)||void 0===r||r.abort(),(null===(t=this.fetchSource)||void 0===t?void 0:t.abort)&&this.fetchSource.abort()}}])}()};export{p as EmptyComponent,f as default,d as defaultOptionHocLazy};
|
|
2
2
|
//# sourceMappingURL=create.hoc-lazy.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{inherits as r,createClass as e,
|
|
1
|
+
import{inherits as r,createClass as e,objectSpread2 as t,classCallCheck as n,callSuper as o,defineProperty as i,regenerator as l}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as a}from"react/jsx-runtime";import s,{Component as u}from"react";import{Box as c,Tooltip as p,IconButton as d}from"@mui/material";import f from"@mui/icons-material/Edit";import m from"@mui/icons-material/Delete";import{mergeObjects as v}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";import{MapTableBaseContext as g}from"./context.js";function h(h){var b=function(){function b(){var r;n(this,b);for(var e=arguments.length,u=new Array(e),c=0;c<e;c++)u[c]=arguments[c];return r=o(this,b,[].concat(u)),i(r,"getButtons",l().m((function r(e,n,o){var i,u,c,v,g,b,y,j,k,C,x,w,D,E;return l().w((function(r){for(;;)switch(r.n){case 0:if(!(k=null!==(i=null===(u=e.props)||void 0===u?void 0:u.before)&&void 0!==i?i:null==n?void 0:n.before)){r.n=1;break}return r.n=1,a(s.Fragment,{children:k(e.props.value,o)},"Before");case 1:if(C=null!==(c=null===(v=e.props)||void 0===v?void 0:v.formEdit)&&void 0!==c?c:null==n?void 0:n.formEdit,x=C?C(e.props.value,o):void 0,!C||!x){r.n=2;break}return r.n=2,a(p,{title:"Edit",arrow:!0,children:a(d,{color:"primary",onClick:function(){null==o||o.showModal(t({renderContent:function(){return x||a(s.Fragment,{})},sx:{display:"flex",justifyContent:"center",alignItems:"center"},backdropActivated:!0},null==h?void 0:h.buttonEditConfig))},children:a(f,{fontSize:"small"})})},"Edit");case 2:if(w=null!==(g=null===(b=e.props)||void 0===b?void 0:b.formDelete)&&void 0!==g?g:null==n?void 0:n.formDelete,D=w?w(e.props.value,o):void 0,!w||!D){r.n=3;break}return r.n=3,a(p,{title:"Delete",arrow:!0,children:a(d,{color:"error",onClick:function(){null==o||o.showModal(t({renderContent:function(){return D||a(s.Fragment,{})},sx:{display:"flex",justifyContent:"center",alignItems:"center"},backdropActivated:!0},null==h?void 0:h.buttonDeleteConfig))},children:a(m,{fontSize:"small"})})},"Delete");case 3:if(!(E=null!==(y=null===(j=e.props)||void 0===j?void 0:j.after)&&void 0!==y?y:null==n?void 0:n.after)){r.n=4;break}return r.n=4,a(s.Fragment,{children:E(e.props.value,o)},"After");case 4:return r.a(2)}}),r)}))),r}return r(b,u),e(b,[{key:"propsMerge",get:function(){return v(h,this.props)}},{key:"render",value:function(){var r=this;return g((function(e){return a(c,t(t({sx:{display:"flex",alignItems:"center",height:"100%"}},r.propsMerge.wrapProps),{},{children:Array.from(r.getButtons(r,r.propsMerge,e))}))}))}}])}();return b}export{h as default};
|
|
2
2
|
//# sourceMappingURL=create.action-row.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.action-row.js","sources":["../../src/table/create.action-row.tsx"],"sourcesContent":["import React, { Component, ComponentType } from 'react'\r\nimport { Box, BoxProps, IconButton, Tooltip } from '@mui/material'\r\nimport EditIcon from '@mui/icons-material/Edit'\r\nimport DeleteIcon from '@mui/icons-material/Delete'\r\nimport { mergeObjects } from '../utils'\r\nimport { GlobalModalState } from '../api-context'\r\nimport { ITableBaseContext, MapTableBaseContext } from './context'\r\n\r\nexport interface IActionRowProps<T> {\r\n value: T\r\n formEdit?: (value: T, tableContext: ITableBaseContext) => React.ReactNode\r\n formDelete?: (value: T, tableContext: ITableBaseContext) => React.ReactNode\r\n after?: (value: T, tableContext: ITableBaseContext) => React.ReactNode\r\n before?: (value: T, tableContext: ITableBaseContext) => React.ReactNode\r\n wrapProps?: BoxProps\r\n buttonEditConfig?: GlobalModalState\r\n buttonDeleteConfig?: GlobalModalState\r\n}\r\n\r\nfunction CreateActionRow<T>(params?: Omit<IActionRowProps<T>, 'value'>): ComponentType<IActionRowProps<T>> {\r\n class ActionRow extends Component<IActionRowProps<T>> {\r\n get propsMerge() {\r\n return mergeObjects<IActionRowProps<T>>(params, this.props)\r\n }\r\n\r\n getButtons = function* (that: ActionRow, thatProps: Omit<IActionRowProps<T>, 'value'>, tableContext: ITableBaseContext) {\r\n const beforeFunc = that.props?.before ?? thatProps?.before\r\n if (beforeFunc) {\r\n yield <React.Fragment key='Before'>{beforeFunc(that.props.value, tableContext)}</React.Fragment>\r\n }\r\n const editFunc = that.props?.formEdit ?? thatProps?.formEdit\r\n const editContent = editFunc ? editFunc(that.props.value, tableContext) : undefined\r\n if (editFunc && !!editContent) {\r\n yield (\r\n <Tooltip title='Edit' arrow key='Edit'>\r\n <IconButton\r\n color='primary'\r\n onClick={() => {\r\n tableContext?.showModal({\r\n renderContent: () => editContent || <React.Fragment />,\r\n sx: { display: 'flex', justifyContent: 'center', alignItems: 'center' },\r\n backdropActivated: true,\r\n ...params?.buttonEditConfig\r\n })\r\n }}\r\n >\r\n <EditIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n )\r\n }\r\n const deleteFunc = that.props?.formDelete ?? thatProps?.formDelete\r\n const deleteContent = deleteFunc ? deleteFunc(that.props.value, tableContext) : undefined\r\n if (deleteFunc && !!deleteContent) {\r\n yield (\r\n <Tooltip title='Delete' arrow key='Delete'>\r\n <IconButton\r\n color='error'\r\n onClick={() => {\r\n tableContext?.showModal({\r\n renderContent: () => deleteContent || <React.Fragment />,\r\n sx: { display: 'flex', justifyContent: 'center', alignItems: 'center' },\r\n backdropActivated: true,\r\n ...params?.buttonDeleteConfig\r\n })\r\n }}\r\n >\r\n <DeleteIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n )\r\n }\r\n const afterFunc = that.props?.after ?? thatProps?.after\r\n if (afterFunc) {\r\n yield <React.Fragment key='After'>{afterFunc(that.props.value, tableContext)}</React.Fragment>\r\n }\r\n }\r\n\r\n render() {\r\n return MapTableBaseContext((context) => (\r\n <Box sx={{ display: 'flex', alignItems: 'center', height: '100%' }} {...this.propsMerge.wrapProps}>\r\n {Array.from(this.getButtons(this, this.propsMerge, context))}\r\n </Box>\r\n ))\r\n }\r\n }\r\n\r\n return ActionRow\r\n}\r\nexport default CreateActionRow\r\n"],"names":["CreateActionRow","params","ActionRow","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","_regenerator","m","_callee","that","thatProps","tableContext","_that$props$before","_that$props","_that$props$formEdit","_that$props2","_that$props$formDelet","_that$props3","_that$props$after","_that$props4","beforeFunc","editFunc","editContent","deleteFunc","deleteContent","afterFunc","w","_context","n","props","before","_jsx","React","Fragment","children","value","formEdit","undefined","Tooltip","title","arrow","IconButton","color","onClick","showModal","_objectSpread","renderContent","sx","display","justifyContent","alignItems","backdropActivated","buttonEditConfig","EditIcon","fontSize","formDelete","buttonDeleteConfig","DeleteIcon","after","a","_inherits","Component","_createClass","key","get","mergeObjects","_this2","MapTableBaseContext","context","Box","height","propsMerge","wrapProps","from","getButtons"],"mappings":"
|
|
1
|
+
{"version":3,"file":"create.action-row.js","sources":["../../src/table/create.action-row.tsx"],"sourcesContent":["import React, { Component, ComponentType } from 'react'\r\nimport { Box, BoxProps, IconButton, Tooltip } from '@mui/material'\r\nimport EditIcon from '@mui/icons-material/Edit'\r\nimport DeleteIcon from '@mui/icons-material/Delete'\r\nimport { mergeObjects } from '../utils'\r\nimport { GlobalModalState } from '../api-context'\r\nimport { ITableBaseContext, MapTableBaseContext } from './context'\r\n\r\nexport interface IActionRowProps<T> {\r\n value: T\r\n formEdit?: (value: T, tableContext: ITableBaseContext) => React.ReactNode\r\n formDelete?: (value: T, tableContext: ITableBaseContext) => React.ReactNode\r\n after?: (value: T, tableContext: ITableBaseContext) => React.ReactNode\r\n before?: (value: T, tableContext: ITableBaseContext) => React.ReactNode\r\n wrapProps?: BoxProps\r\n buttonEditConfig?: GlobalModalState\r\n buttonDeleteConfig?: GlobalModalState\r\n}\r\n\r\nfunction CreateActionRow<T>(params?: Omit<IActionRowProps<T>, 'value'>): ComponentType<IActionRowProps<T>> {\r\n class ActionRow extends Component<IActionRowProps<T>> {\r\n get propsMerge() {\r\n return mergeObjects<IActionRowProps<T>>(params, this.props)\r\n }\r\n\r\n getButtons = function* (that: ActionRow, thatProps: Omit<IActionRowProps<T>, 'value'>, tableContext: ITableBaseContext) {\r\n const beforeFunc = that.props?.before ?? thatProps?.before\r\n if (beforeFunc) {\r\n yield <React.Fragment key='Before'>{beforeFunc(that.props.value, tableContext)}</React.Fragment>\r\n }\r\n const editFunc = that.props?.formEdit ?? thatProps?.formEdit\r\n const editContent = editFunc ? editFunc(that.props.value, tableContext) : undefined\r\n if (editFunc && !!editContent) {\r\n yield (\r\n <Tooltip title='Edit' arrow key='Edit'>\r\n <IconButton\r\n color='primary'\r\n onClick={() => {\r\n tableContext?.showModal({\r\n renderContent: () => editContent || <React.Fragment />,\r\n sx: { display: 'flex', justifyContent: 'center', alignItems: 'center' },\r\n backdropActivated: true,\r\n ...params?.buttonEditConfig\r\n })\r\n }}\r\n >\r\n <EditIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n )\r\n }\r\n const deleteFunc = that.props?.formDelete ?? thatProps?.formDelete\r\n const deleteContent = deleteFunc ? deleteFunc(that.props.value, tableContext) : undefined\r\n if (deleteFunc && !!deleteContent) {\r\n yield (\r\n <Tooltip title='Delete' arrow key='Delete'>\r\n <IconButton\r\n color='error'\r\n onClick={() => {\r\n tableContext?.showModal({\r\n renderContent: () => deleteContent || <React.Fragment />,\r\n sx: { display: 'flex', justifyContent: 'center', alignItems: 'center' },\r\n backdropActivated: true,\r\n ...params?.buttonDeleteConfig\r\n })\r\n }}\r\n >\r\n <DeleteIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n )\r\n }\r\n const afterFunc = that.props?.after ?? thatProps?.after\r\n if (afterFunc) {\r\n yield <React.Fragment key='After'>{afterFunc(that.props.value, tableContext)}</React.Fragment>\r\n }\r\n }\r\n\r\n render() {\r\n return MapTableBaseContext((context) => (\r\n <Box sx={{ display: 'flex', alignItems: 'center', height: '100%' }} {...this.propsMerge.wrapProps}>\r\n {Array.from(this.getButtons(this, this.propsMerge, context))}\r\n </Box>\r\n ))\r\n }\r\n }\r\n\r\n return ActionRow\r\n}\r\nexport default CreateActionRow\r\n"],"names":["CreateActionRow","params","ActionRow","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","_regenerator","m","_callee","that","thatProps","tableContext","_that$props$before","_that$props","_that$props$formEdit","_that$props2","_that$props$formDelet","_that$props3","_that$props$after","_that$props4","beforeFunc","editFunc","editContent","deleteFunc","deleteContent","afterFunc","w","_context","n","props","before","_jsx","React","Fragment","children","value","formEdit","undefined","Tooltip","title","arrow","IconButton","color","onClick","showModal","_objectSpread","renderContent","sx","display","justifyContent","alignItems","backdropActivated","buttonEditConfig","EditIcon","fontSize","formDelete","buttonDeleteConfig","DeleteIcon","after","a","_inherits","Component","_createClass","key","get","mergeObjects","_this2","MapTableBaseContext","context","Box","height","propsMerge","wrapProps","from","getButtons"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{objectWithoutProperties as e,objectSpread2 as o,defineProperty as r,inherits as t,createClass as a,classCallCheck as i,callSuper as l,toConsumableArray as n}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as s}from"react/jsx-runtime";import{Component as d}from"react";import{styled as u,Box as p}from"@mui/material";import{DataGrid as c}from"@mui/x-data-grid";import{mergeObjects as m}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"
|
|
1
|
+
import{objectWithoutProperties as e,objectSpread2 as o,defineProperty as r,inherits as t,createClass as a,classCallCheck as i,callSuper as l,toConsumableArray as n}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as s}from"react/jsx-runtime";import{Component as d}from"react";import{styled as u,Box as p}from"@mui/material";import{DataGrid as c}from"@mui/x-data-grid";import{mergeObjects as m}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";import{TableBaseContext as g}from"./context.js";import{customFilterOperators as h}from"./custom.filter-operators.js";import f,{dinoTableClasses as v}from"./helpers.js";import b from"./toolbar-pannel.js";import y,{mapGlobalModalContext as C}from"../api-context/global-modal.js";var P=["children"];function M(e){return function(){function u(t){var a;return i(this,u),a=l(this,u,[t]),r(a,"setTableQueryParams",(function(e){a.tableQueryParams=m({},a.tableQueryParams,e)})),r(a,"renderWrapContext",(function(e){return s(y,{children:C((function(o){return s(g.Provider,{value:{showModal:o.show,closeModal:o.close},children:e})}))})})),r(a,"getDataGridProps",(function(){var o,r,t,i,l=a.mergeConfig,n={getRowId:e.getRowId,columns:a.columns,rows:null!==(o=null===(r=a.props.data)||void 0===r?void 0:r.items)&&void 0!==o?o:[],checkboxSelection:!0,pagination:!0,density:null!==(t=null===(i=a.props.slots)||void 0===i?void 0:i.density)&&void 0!==t?t:"standard",initialState:f.mapInitialState(a.props.query,{columns:{columnVisibilityModel:e.columnVisibilityModel}}),filterDebounceMs:800,sx:{border:0},slots:{toolbar:l.toolbar},rowSelectionModel:a.rowSelecteds,onRowSelectionModelChange:a.handleRowSelectionChange};if("server"===e.featureMode){var s,d,u={filterMode:"server",sortingMode:"server",paginationMode:"server",onPaginationModelChange:a.onPaginationModelChange,onFilterModelChange:a.onFilterModelChange,onSortModelChange:a.onSortModelChange,rowCount:null!==(s=null===(d=a.props.data)||void 0===d?void 0:d.rowTotal)&&void 0!==s?s:0,paginationModel:a.tableQueryParams.pagination,filterModel:a.tableQueryParams.filter,sortModel:f.mapSortModel(a.tableQueryParams.sort),loading:a.tableQueryParams.loading};Object.assign(n,u)}return m(n,a.mergeConfig.dataGridProps)})),r(a,"initialColumns",(function(){var r,t,i=a.mergeConfig.ActionRow,l=[];return i&&l.push(o({field:"Actions",minWidth:100,headerAlign:"right",align:"right",filterable:!1,sortable:!1,renderCell:function(e){return s(i,{value:e.row})}},e.actionRow)),r=l,t=Object.keys(e.columns).map((function(r){var t=o({field:r},e.columns[r]);return t.filterOperators=e.filterOperators?e.filterOperators(t):h(t),t})),r&&r.length>0&&t.push.apply(t,n(r)),t})),r(a,"onPaginationModelChange",(function(e,o){a.setTableQueryParams({pagination:e,detail:"pagination"}),a.handleChange()})),r(a,"onFilterModelChange",(function(e,o){var r,t=a.tableQueryParams.pagination;a.setTableQueryParams({filter:e,pagination:{page:0,pageSize:null!==(r=null==t?void 0:t.pageSize)&&void 0!==r?r:25},detail:f.detectSearchType(e)}),a.handleChange()})),r(a,"onSortModelChange",(function(e,o){var r,t,i,l,n,s=e,d=a.tableQueryParams.sort;null!=d&&d.length&&!s.length&&(s=(null==d||null===(r=d[0])||void 0===r?void 0:r.field)===(null===(t=a.defaultTableQueryParams.sort)||void 0===t||null===(t=t[0])||void 0===t?void 0:t.field)?[{field:null===(i=d[0])||void 0===i?void 0:i.field,sort:"desc"===(null===(l=d[0])||void 0===l?void 0:l.sort)?"asc":"desc"}]:null!==(n=a.defaultTableQueryParams.sort)&&void 0!==n?n:[]);a.setTableQueryParams({sort:s,detail:"sort"}),a.handleChange()})),r(a,"handleChange",(function(){a.props.onChange&&a.props.onChange(a.tableQueryParams)})),r(a,"handleRowSelectionChange",(function(e,o){a.mergeConfig.maxSelcion&&e.length>a.mergeConfig.maxSelcion?a.rowSelecteds=e.slice(0,a.mergeConfig.maxSelcion):a.rowSelecteds=e,a.props.onRowSelectionChange&&a.props.onRowSelectionChange(a.rowSelecteds,o),a.forceUpdate()})),a.columns=a.initialColumns(),a.tableQueryParams=o({},t.query),a.defaultTableQueryParams=a.tableQueryParams,a.rowSelecteds=[],a}return t(u,d),a(u,[{key:"mergeConfig",get:function(){var r,t,a,i,l,n,d,u=m({},null==e?void 0:e.toolbarProps,null===(r=this.props.slots)||void 0===r?void 0:r.toolbarProps);return{toolbar:null!==(t=null===(a=this.props.slots)||void 0===a?void 0:a.toolbar)&&void 0!==t?t:function(){return s(b,o({},u))},ActionRow:null===(i=this.props.slots)||void 0===i?void 0:i.actionRow,columnVisibilityModel:e.columnVisibilityModel,maxSelcion:null!==(l=null===(n=this.props.slots)||void 0===n?void 0:n.maxSelection)&&void 0!==l?l:e.maxSelection,dataGridProps:m({},e.dataGridProps,null===(d=this.props.slots)||void 0===d?void 0:d.dataGridProps)}}},{key:"shouldComponentUpdate",value:function(o){return"server"!==e.featureMode||f.equalTableQueryParams(o.query,this.props.query)?"server"!==e.featureMode:(this.setTableQueryParams(null!==(r=o.query)&&void 0!==r?r:{}),!0);var r}},{key:"render",value:function(){return this.renderWrapContext(s(S,{children:s(c,o({},this.getDataGridProps()))}))}}])}()}var S=u((function(r){var t=r.children,a=e(r,P);return s(p,o(o({},a),{},{children:s("div",{children:t})}))}))(r({flex:1,position:"relative","& > div":{position:"absolute",top:0,left:0,width:"100%",height:"100%",overflowY:"auto"},"& .MuiDataGrid-root":{"--unstable_DataGrid-radius":0}},"& .MuiDataGrid-cell.".concat(v.whiteSpacePre," .MuiDataGrid-cellContent"),{whiteSpace:"pre"}));export{M as default};
|
|
2
2
|
//# sourceMappingURL=create.table.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.table.js","sources":["../../src/table/create.table.tsx"],"sourcesContent":["import React, { Component, ComponentType } from 'react'\r\nimport { Box, BoxProps, styled } from '@mui/material'\r\nimport { DataGrid, DataGridProps, GridColDef, GridFeatureMode, GridFilterOperator } from '@mui/x-data-grid'\r\nimport { GridSortModel, GridValidRowModel, GridRowIdGetter, GridRowSelectionModel } from '@mui/x-data-grid'\r\nimport { GridCallbackDetails, GridColumnVisibilityModel, GridDensity, GridFilterModel, GridPaginationModel } from '@mui/x-data-grid'\r\nimport { mergeObjects } from '../utils'\r\nimport { TableBaseContext } from './context'\r\nimport { IActionRowProps } from './create.action-row'\r\nimport { customFilterOperators } from './custom.filter-operators'\r\nimport { GlobalModal, mapGlobalModalContext } from '../api-context'\r\nimport { ICustomGridColDef, ICustomGridFilterModel, ICustomGridSortModel, ITableData, ITableQueryParams } from './types'\r\nimport TableHelper, { dinoTableClasses } from './helpers'\r\nimport ToolbarPannel, { IToolbarPannelProps } from './toolbar-pannel'\r\n\r\nexport interface ITableSlots<T> {\r\n maxSelection?: number\r\n density?: GridDensity\r\n toolbar?: React.ComponentType<IToolbarPannelProps>\r\n actionRow?: React.ComponentType<IActionRowProps<T>>\r\n toolbarProps?: IToolbarPannelProps\r\n dataGridProps?: DataGridProps\r\n}\r\n\r\nexport type ITableParamsSlots<T> = Pick<ITableSlots<T>, 'maxSelection' | 'toolbarProps' | 'dataGridProps'>\r\n\r\nexport interface ITableProps<T> {\r\n data?: ITableData<T>\r\n query?: ITableQueryParams<T>\r\n onChange?: (query: ITableQueryParams<T>) => void\r\n onRowSelectionChange?: DataGridProps['onRowSelectionModelChange']\r\n slots?: ITableSlots<T>\r\n}\r\n\r\nexport interface ITableParams<T extends GridValidRowModel> extends ITableParamsSlots<T> {\r\n featureMode?: GridFeatureMode\r\n getRowId: GridRowIdGetter<T>\r\n columns: ICustomGridColDef<T>\r\n filterOperators?: (config: GridColDef) => GridFilterOperator[]\r\n columnVisibilityModel?: Partial<Record<keyof T, boolean>>\r\n actionRow?: Omit<GridColDef, 'field'>\r\n}\r\n\r\nfunction CreateTable<T extends GridValidRowModel>(params: ITableParams<T>): ComponentType<ITableProps<T>> {\r\n const generateColumns = (extendColDefs?: GridColDef[]) => {\r\n const columns = Object.keys(params.columns).map<GridColDef>((key) => {\r\n const obj = { field: key, ...params.columns[key] }\r\n obj.filterOperators = params.filterOperators ? params.filterOperators(obj) : customFilterOperators(obj)\r\n return obj\r\n })\r\n\r\n if (!!extendColDefs && extendColDefs.length > 0) columns.push(...extendColDefs)\r\n return columns\r\n }\r\n\r\n class Table extends Component<ITableProps<T>> {\r\n private tableQueryParams: ITableQueryParams<T>\r\n // private tableQueryParamsCache: ITableQueryParams<T> = {}\r\n private defaultTableQueryParams: ITableQueryParams<T>\r\n private columns: GridColDef<T>[]\r\n private rowSelecteds: GridRowSelectionModel\r\n constructor(props: ITableProps<T>) {\r\n super(props)\r\n this.columns = this.initialColumns()\r\n this.tableQueryParams = { ...props.query }\r\n this.defaultTableQueryParams = this.tableQueryParams\r\n this.rowSelecteds = []\r\n }\r\n\r\n get mergeConfig() {\r\n const toolbarPannelProps = mergeObjects({}, params?.toolbarProps, this.props.slots?.toolbarProps)\r\n return {\r\n toolbar: this.props.slots?.toolbar ?? (() => <ToolbarPannel {...toolbarPannelProps} />),\r\n ActionRow: this.props.slots?.actionRow,\r\n columnVisibilityModel: params.columnVisibilityModel,\r\n maxSelcion: this.props.slots?.maxSelection ?? params.maxSelection,\r\n dataGridProps: mergeObjects({}, params.dataGridProps, this.props.slots?.dataGridProps)\r\n }\r\n }\r\n\r\n setTableQueryParams = (value: Partial<ITableQueryParams<T>>) => {\r\n this.tableQueryParams = mergeObjects({}, this.tableQueryParams, value)\r\n }\r\n\r\n shouldComponentUpdate(nextProps: Readonly<ITableProps<T>>): boolean {\r\n if (params.featureMode === 'server' && !TableHelper.equalTableQueryParams(nextProps.query, this.props.query)) {\r\n this.setTableQueryParams(nextProps.query ?? {})\r\n return true\r\n } else if (params.featureMode !== 'server') {\r\n return true\r\n } else {\r\n return false\r\n }\r\n }\r\n\r\n render() {\r\n return this.renderWrapContext(\r\n <Wrap>\r\n <DataGrid {...this.getDataGridProps()} />\r\n </Wrap>\r\n )\r\n }\r\n\r\n renderWrapContext = (children: React.ReactNode) => (\r\n <GlobalModal>\r\n {mapGlobalModalContext((context) => (\r\n <TableBaseContext.Provider value={{ showModal: context.show, closeModal: context.close }}>{children}</TableBaseContext.Provider>\r\n ))}\r\n </GlobalModal>\r\n )\r\n\r\n getDataGridProps = (): DataGridProps<T> => {\r\n const mergeConfig = this.mergeConfig\r\n const obj: DataGridProps<T> = {\r\n getRowId: params.getRowId,\r\n columns: this.columns,\r\n rows: this.props.data?.items ?? [],\r\n checkboxSelection: true,\r\n pagination: true,\r\n density: this.props.slots?.density ?? 'standard',\r\n initialState: TableHelper.mapInitialState(this.props.query, {\r\n columns: { columnVisibilityModel: params.columnVisibilityModel as GridColumnVisibilityModel }\r\n }),\r\n filterDebounceMs: 800,\r\n sx: { border: 0 },\r\n slots: { toolbar: mergeConfig.toolbar },\r\n rowSelectionModel: this.rowSelecteds,\r\n onRowSelectionModelChange: this.handleRowSelectionChange\r\n }\r\n if (params.featureMode === 'server') {\r\n const objServer: Partial<DataGridProps<T>> = {\r\n filterMode: 'server',\r\n sortingMode: 'server',\r\n paginationMode: 'server',\r\n onPaginationModelChange: this.onPaginationModelChange,\r\n onFilterModelChange: this.onFilterModelChange,\r\n onSortModelChange: this.onSortModelChange,\r\n rowCount: this.props.data?.rowTotal ?? 0,\r\n paginationModel: this.tableQueryParams.pagination,\r\n filterModel: this.tableQueryParams.filter as GridFilterModel,\r\n sortModel: TableHelper.mapSortModel(this.tableQueryParams.sort),\r\n loading: this.tableQueryParams.loading\r\n }\r\n Object.assign(obj, objServer)\r\n }\r\n return mergeObjects(obj, this.mergeConfig.dataGridProps)\r\n }\r\n\r\n initialColumns = (): GridColDef<T>[] => {\r\n const { ActionRow } = this.mergeConfig\r\n const list: GridColDef<T>[] = []\r\n if (!!ActionRow) {\r\n list.push({\r\n field: 'Actions',\r\n minWidth: 100,\r\n headerAlign: 'right',\r\n align: 'right',\r\n filterable: false,\r\n sortable: false,\r\n renderCell: (value) => <ActionRow value={value.row} />,\r\n ...params.actionRow\r\n })\r\n }\r\n return generateColumns(list)\r\n }\r\n\r\n onPaginationModelChange = (model: GridPaginationModel, details: GridCallbackDetails<'pagination'>) => {\r\n this.setTableQueryParams({ pagination: model, detail: 'pagination' })\r\n this.handleChange()\r\n }\r\n\r\n onFilterModelChange = (model: GridFilterModel, details: GridCallbackDetails<'filter'>) => {\r\n const { pagination } = this.tableQueryParams\r\n this.setTableQueryParams({\r\n filter: model as ICustomGridFilterModel<T>,\r\n pagination: { page: 0, pageSize: pagination?.pageSize ?? 25 },\r\n detail: TableHelper.detectSearchType(model)\r\n })\r\n this.handleChange()\r\n }\r\n\r\n onSortModelChange = (model: GridSortModel, details: GridCallbackDetails<any>) => {\r\n let sortValue = model as ICustomGridSortModel<T>\r\n const { sort } = this.tableQueryParams\r\n if (!!sort?.length && !sortValue.length) {\r\n if (sort?.[0]?.field === this.defaultTableQueryParams.sort?.[0]?.field) {\r\n sortValue = [{ field: sort[0]?.field, sort: sort[0]?.sort === 'desc' ? 'asc' : 'desc' }]\r\n } else {\r\n sortValue = this.defaultTableQueryParams.sort ?? []\r\n }\r\n }\r\n this.setTableQueryParams({ sort: sortValue, detail: 'sort' })\r\n this.handleChange()\r\n }\r\n\r\n handleChange = () => {\r\n this.props.onChange && this.props.onChange(this.tableQueryParams)\r\n }\r\n\r\n handleRowSelectionChange = (value: GridRowSelectionModel, details: GridCallbackDetails) => {\r\n if (this.mergeConfig.maxSelcion && value.length > this.mergeConfig.maxSelcion) {\r\n this.rowSelecteds = value.slice(0, this.mergeConfig.maxSelcion)\r\n } else {\r\n this.rowSelecteds = value\r\n }\r\n this.props.onRowSelectionChange && this.props.onRowSelectionChange(this.rowSelecteds, details)\r\n this.forceUpdate()\r\n }\r\n }\r\n\r\n return Table\r\n}\r\n\r\nexport default CreateTable\r\n\r\nconst Wrap = styled(({ children, ...p }: BoxProps) => (\r\n <Box {...p}>\r\n <div>{children}</div>\r\n </Box>\r\n))({\r\n flex: 1,\r\n position: 'relative',\r\n '& > div': {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n overflowY: 'auto'\r\n },\r\n '& .MuiDataGrid-root': {\r\n '--unstable_DataGrid-radius': 0\r\n },\r\n [`& .MuiDataGrid-cell.${dinoTableClasses.whiteSpacePre} .MuiDataGrid-cellContent`]: {\r\n whiteSpace: 'pre'\r\n }\r\n})\r\n"],"names":["CreateTable","params","Table","props","_this","_classCallCheck","_callSuper","_defineProperty","value","tableQueryParams","mergeObjects","children","_jsx","GlobalModal","mapGlobalModalContext","context","TableBaseContext","Provider","showModal","show","closeModal","close","_this$props$data$item","_this$props$data","_this$props$slots$den","_this$props$slots","mergeConfig","obj","getRowId","columns","rows","data","items","checkboxSelection","pagination","density","slots","initialState","TableHelper","mapInitialState","query","columnVisibilityModel","filterDebounceMs","sx","border","toolbar","rowSelectionModel","rowSelecteds","onRowSelectionModelChange","handleRowSelectionChange","featureMode","_this$props$data$rowT","_this$props$data2","objServer","filterMode","sortingMode","paginationMode","onPaginationModelChange","onFilterModelChange","onSortModelChange","rowCount","rowTotal","paginationModel","filterModel","filter","sortModel","mapSortModel","sort","loading","Object","assign","dataGridProps","extendColDefs","ActionRow","list","push","_objectSpread","field","minWidth","headerAlign","align","filterable","sortable","renderCell","row","actionRow","keys","map","key","filterOperators","customFilterOperators","length","apply","_toConsumableArray","model","details","setTableQueryParams","detail","handleChange","_pagination$pageSize","page","pageSize","detectSearchType","_sort$","_this$defaultTableQue","_sort$2","_sort$3","_this$defaultTableQue2","sortValue","defaultTableQueryParams","onChange","maxSelcion","slice","onRowSelectionChange","forceUpdate","initialColumns","_inherits","Component","_createClass","get","_this$props$slots2","_this$props$slots$too","_this$props$slots3","_this$props$slots4","_this$props$slots$max","_this$props$slots5","_this$props$slots6","toolbarPannelProps","toolbarProps","this","ToolbarPannel","maxSelection","nextProps","equalTableQueryParams","_nextProps$query","renderWrapContext","Wrap","DataGrid","getDataGridProps","styled","_ref","p","_objectWithoutProperties","_excluded","Box","flex","position","top","left","width","height","overflowY","concat","dinoTableClasses","whiteSpacePre","whiteSpace"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create.table.js","sources":["../../src/table/create.table.tsx"],"sourcesContent":["import React, { Component, ComponentType } from 'react'\r\nimport { Box, BoxProps, styled } from '@mui/material'\r\nimport { DataGrid, DataGridProps, GridColDef, GridFeatureMode, GridFilterOperator } from '@mui/x-data-grid'\r\nimport { GridSortModel, GridValidRowModel, GridRowIdGetter, GridRowSelectionModel } from '@mui/x-data-grid'\r\nimport { GridCallbackDetails, GridColumnVisibilityModel, GridDensity, GridFilterModel, GridPaginationModel } from '@mui/x-data-grid'\r\nimport { mergeObjects } from '../utils'\r\nimport { TableBaseContext } from './context'\r\nimport { IActionRowProps } from './create.action-row'\r\nimport { customFilterOperators } from './custom.filter-operators'\r\nimport { GlobalModal, mapGlobalModalContext } from '../api-context'\r\nimport { ICustomGridColDef, ICustomGridFilterModel, ICustomGridSortModel, ITableData, ITableQueryParams } from './types'\r\nimport TableHelper, { dinoTableClasses } from './helpers'\r\nimport ToolbarPannel, { IToolbarPannelProps } from './toolbar-pannel'\r\n\r\nexport interface ITableSlots<T> {\r\n maxSelection?: number\r\n density?: GridDensity\r\n toolbar?: React.ComponentType<IToolbarPannelProps>\r\n actionRow?: React.ComponentType<IActionRowProps<T>>\r\n toolbarProps?: IToolbarPannelProps\r\n dataGridProps?: DataGridProps\r\n}\r\n\r\nexport type ITableParamsSlots<T> = Pick<ITableSlots<T>, 'maxSelection' | 'toolbarProps' | 'dataGridProps'>\r\n\r\nexport interface ITableProps<T> {\r\n data?: ITableData<T>\r\n query?: ITableQueryParams<T>\r\n onChange?: (query: ITableQueryParams<T>) => void\r\n onRowSelectionChange?: DataGridProps['onRowSelectionModelChange']\r\n slots?: ITableSlots<T>\r\n}\r\n\r\nexport interface ITableParams<T extends GridValidRowModel> extends ITableParamsSlots<T> {\r\n featureMode?: GridFeatureMode\r\n getRowId: GridRowIdGetter<T>\r\n columns: ICustomGridColDef<T>\r\n filterOperators?: (config: GridColDef) => GridFilterOperator[]\r\n columnVisibilityModel?: Partial<Record<keyof T, boolean>>\r\n actionRow?: Omit<GridColDef, 'field'>\r\n}\r\n\r\nfunction CreateTable<T extends GridValidRowModel>(params: ITableParams<T>): ComponentType<ITableProps<T>> {\r\n const generateColumns = (extendColDefs?: GridColDef[]) => {\r\n const columns = Object.keys(params.columns).map<GridColDef>((key) => {\r\n const obj = { field: key, ...params.columns[key] }\r\n obj.filterOperators = params.filterOperators ? params.filterOperators(obj) : customFilterOperators(obj)\r\n return obj\r\n })\r\n\r\n if (!!extendColDefs && extendColDefs.length > 0) columns.push(...extendColDefs)\r\n return columns\r\n }\r\n\r\n class Table extends Component<ITableProps<T>> {\r\n private tableQueryParams: ITableQueryParams<T>\r\n // private tableQueryParamsCache: ITableQueryParams<T> = {}\r\n private defaultTableQueryParams: ITableQueryParams<T>\r\n private columns: GridColDef<T>[]\r\n private rowSelecteds: GridRowSelectionModel\r\n constructor(props: ITableProps<T>) {\r\n super(props)\r\n this.columns = this.initialColumns()\r\n this.tableQueryParams = { ...props.query }\r\n this.defaultTableQueryParams = this.tableQueryParams\r\n this.rowSelecteds = []\r\n }\r\n\r\n get mergeConfig() {\r\n const toolbarPannelProps = mergeObjects({}, params?.toolbarProps, this.props.slots?.toolbarProps)\r\n return {\r\n toolbar: this.props.slots?.toolbar ?? (() => <ToolbarPannel {...toolbarPannelProps} />),\r\n ActionRow: this.props.slots?.actionRow,\r\n columnVisibilityModel: params.columnVisibilityModel,\r\n maxSelcion: this.props.slots?.maxSelection ?? params.maxSelection,\r\n dataGridProps: mergeObjects({}, params.dataGridProps, this.props.slots?.dataGridProps)\r\n }\r\n }\r\n\r\n setTableQueryParams = (value: Partial<ITableQueryParams<T>>) => {\r\n this.tableQueryParams = mergeObjects({}, this.tableQueryParams, value)\r\n }\r\n\r\n shouldComponentUpdate(nextProps: Readonly<ITableProps<T>>): boolean {\r\n if (params.featureMode === 'server' && !TableHelper.equalTableQueryParams(nextProps.query, this.props.query)) {\r\n this.setTableQueryParams(nextProps.query ?? {})\r\n return true\r\n } else if (params.featureMode !== 'server') {\r\n return true\r\n } else {\r\n return false\r\n }\r\n }\r\n\r\n render() {\r\n return this.renderWrapContext(\r\n <Wrap>\r\n <DataGrid {...this.getDataGridProps()} />\r\n </Wrap>\r\n )\r\n }\r\n\r\n renderWrapContext = (children: React.ReactNode) => (\r\n <GlobalModal>\r\n {mapGlobalModalContext((context) => (\r\n <TableBaseContext.Provider value={{ showModal: context.show, closeModal: context.close }}>{children}</TableBaseContext.Provider>\r\n ))}\r\n </GlobalModal>\r\n )\r\n\r\n getDataGridProps = (): DataGridProps<T> => {\r\n const mergeConfig = this.mergeConfig\r\n const obj: DataGridProps<T> = {\r\n getRowId: params.getRowId,\r\n columns: this.columns,\r\n rows: this.props.data?.items ?? [],\r\n checkboxSelection: true,\r\n pagination: true,\r\n density: this.props.slots?.density ?? 'standard',\r\n initialState: TableHelper.mapInitialState(this.props.query, {\r\n columns: { columnVisibilityModel: params.columnVisibilityModel as GridColumnVisibilityModel }\r\n }),\r\n filterDebounceMs: 800,\r\n sx: { border: 0 },\r\n slots: { toolbar: mergeConfig.toolbar },\r\n rowSelectionModel: this.rowSelecteds,\r\n onRowSelectionModelChange: this.handleRowSelectionChange\r\n }\r\n if (params.featureMode === 'server') {\r\n const objServer: Partial<DataGridProps<T>> = {\r\n filterMode: 'server',\r\n sortingMode: 'server',\r\n paginationMode: 'server',\r\n onPaginationModelChange: this.onPaginationModelChange,\r\n onFilterModelChange: this.onFilterModelChange,\r\n onSortModelChange: this.onSortModelChange,\r\n rowCount: this.props.data?.rowTotal ?? 0,\r\n paginationModel: this.tableQueryParams.pagination,\r\n filterModel: this.tableQueryParams.filter as GridFilterModel,\r\n sortModel: TableHelper.mapSortModel(this.tableQueryParams.sort),\r\n loading: this.tableQueryParams.loading\r\n }\r\n Object.assign(obj, objServer)\r\n }\r\n return mergeObjects(obj, this.mergeConfig.dataGridProps)\r\n }\r\n\r\n initialColumns = (): GridColDef<T>[] => {\r\n const { ActionRow } = this.mergeConfig\r\n const list: GridColDef<T>[] = []\r\n if (!!ActionRow) {\r\n list.push({\r\n field: 'Actions',\r\n minWidth: 100,\r\n headerAlign: 'right',\r\n align: 'right',\r\n filterable: false,\r\n sortable: false,\r\n renderCell: (value) => <ActionRow value={value.row} />,\r\n ...params.actionRow\r\n })\r\n }\r\n return generateColumns(list)\r\n }\r\n\r\n onPaginationModelChange = (model: GridPaginationModel, details: GridCallbackDetails<'pagination'>) => {\r\n this.setTableQueryParams({ pagination: model, detail: 'pagination' })\r\n this.handleChange()\r\n }\r\n\r\n onFilterModelChange = (model: GridFilterModel, details: GridCallbackDetails<'filter'>) => {\r\n const { pagination } = this.tableQueryParams\r\n this.setTableQueryParams({\r\n filter: model as ICustomGridFilterModel<T>,\r\n pagination: { page: 0, pageSize: pagination?.pageSize ?? 25 },\r\n detail: TableHelper.detectSearchType(model)\r\n })\r\n this.handleChange()\r\n }\r\n\r\n onSortModelChange = (model: GridSortModel, details: GridCallbackDetails<any>) => {\r\n let sortValue = model as ICustomGridSortModel<T>\r\n const { sort } = this.tableQueryParams\r\n if (!!sort?.length && !sortValue.length) {\r\n if (sort?.[0]?.field === this.defaultTableQueryParams.sort?.[0]?.field) {\r\n sortValue = [{ field: sort[0]?.field, sort: sort[0]?.sort === 'desc' ? 'asc' : 'desc' }]\r\n } else {\r\n sortValue = this.defaultTableQueryParams.sort ?? []\r\n }\r\n }\r\n this.setTableQueryParams({ sort: sortValue, detail: 'sort' })\r\n this.handleChange()\r\n }\r\n\r\n handleChange = () => {\r\n this.props.onChange && this.props.onChange(this.tableQueryParams)\r\n }\r\n\r\n handleRowSelectionChange = (value: GridRowSelectionModel, details: GridCallbackDetails) => {\r\n if (this.mergeConfig.maxSelcion && value.length > this.mergeConfig.maxSelcion) {\r\n this.rowSelecteds = value.slice(0, this.mergeConfig.maxSelcion)\r\n } else {\r\n this.rowSelecteds = value\r\n }\r\n this.props.onRowSelectionChange && this.props.onRowSelectionChange(this.rowSelecteds, details)\r\n this.forceUpdate()\r\n }\r\n }\r\n\r\n return Table\r\n}\r\n\r\nexport default CreateTable\r\n\r\nconst Wrap = styled(({ children, ...p }: BoxProps) => (\r\n <Box {...p}>\r\n <div>{children}</div>\r\n </Box>\r\n))({\r\n flex: 1,\r\n position: 'relative',\r\n '& > div': {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n overflowY: 'auto'\r\n },\r\n '& .MuiDataGrid-root': {\r\n '--unstable_DataGrid-radius': 0\r\n },\r\n [`& .MuiDataGrid-cell.${dinoTableClasses.whiteSpacePre} .MuiDataGrid-cellContent`]: {\r\n whiteSpace: 'pre'\r\n }\r\n})\r\n"],"names":["CreateTable","params","Table","props","_this","_classCallCheck","_callSuper","_defineProperty","value","tableQueryParams","mergeObjects","children","_jsx","GlobalModal","mapGlobalModalContext","context","TableBaseContext","Provider","showModal","show","closeModal","close","_this$props$data$item","_this$props$data","_this$props$slots$den","_this$props$slots","mergeConfig","obj","getRowId","columns","rows","data","items","checkboxSelection","pagination","density","slots","initialState","TableHelper","mapInitialState","query","columnVisibilityModel","filterDebounceMs","sx","border","toolbar","rowSelectionModel","rowSelecteds","onRowSelectionModelChange","handleRowSelectionChange","featureMode","_this$props$data$rowT","_this$props$data2","objServer","filterMode","sortingMode","paginationMode","onPaginationModelChange","onFilterModelChange","onSortModelChange","rowCount","rowTotal","paginationModel","filterModel","filter","sortModel","mapSortModel","sort","loading","Object","assign","dataGridProps","extendColDefs","ActionRow","list","push","_objectSpread","field","minWidth","headerAlign","align","filterable","sortable","renderCell","row","actionRow","keys","map","key","filterOperators","customFilterOperators","length","apply","_toConsumableArray","model","details","setTableQueryParams","detail","handleChange","_pagination$pageSize","page","pageSize","detectSearchType","_sort$","_this$defaultTableQue","_sort$2","_sort$3","_this$defaultTableQue2","sortValue","defaultTableQueryParams","onChange","maxSelcion","slice","onRowSelectionChange","forceUpdate","initialColumns","_inherits","Component","_createClass","get","_this$props$slots2","_this$props$slots$too","_this$props$slots3","_this$props$slots4","_this$props$slots$max","_this$props$slots5","_this$props$slots6","toolbarPannelProps","toolbarProps","this","ToolbarPannel","maxSelection","nextProps","equalTableQueryParams","_nextProps$query","renderWrapContext","Wrap","DataGrid","getDataGridProps","styled","_ref","p","_objectWithoutProperties","_excluded","Box","flex","position","top","left","width","height","overflowY","concat","dinoTableClasses","whiteSpacePre","whiteSpace"],"mappings":"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"}
|
package/dist/table/dino.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createClass as r,classCallCheck as t,defineProperty as e,objectSpread2 as
|
|
1
|
+
import{createClass as r,classCallCheck as t,defineProperty as e,objectSpread2 as n,objectWithoutProperties as a}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as o}from"react/jsx-runtime";import i from"dayjs";import"../utils/dayjs-config.js";import"../utils/query-param.js";import{MapTableBaseContext as u}from"./context.js";import{BtnFormDetail as l,BtnDetail as s}from"./ui.buttons.js";import{CreateStatusCell as c,CellChips as m,CellBase as f,CellImageSmall as v,CellDate as h}from"./ui.units.js";import d from"./toolbar-pannel.js";import p from"./helpers.js";import j from"./create.table.js";import b from"./create.action-row.js";import g from"../components/breadcrumbs.js";var C=["imageUrl","valueFormatter"],S=["formatString"],y="MM/DD/YYYY HH:mm",D=new(r((function r(){var D=this;t(this,r),e(this,"createTable",j),e(this,"createActionRow",b),e(this,"setUrlQuery",p.setUrlQuery),e(this,"getUrlQuery",p.getUrlQuery),e(this,"mapContext",u),e(this,"ToolbarPannel",d),e(this,"createToolbar",(function(r){return function(t){return o(d,n({},n(n({},t),r)))}})),e(this,"BtnFormDetail",l),e(this,"BtnDetail",s),e(this,"createBreadcrumbConfigs",(function(r){return r})),e(this,"createBreadcrumbs",(function(r){return function(){return o(g,{value:r})}})),e(this,"createStatusCell",c),e(this,"formatterDate",(function(r,t){var e,n,a=null!==(e=null==t?void 0:t.formatString)&&void 0!==e?e:y,o=null!==(n=null==t?void 0:t.showRelative)&&void 0!==n&&n;try{if(!r)return"";var u=i(r),l=u.format(a);return o?"".concat(l," (").concat(i().to(u),")"):l}catch(r){return""}})),e(this,"valueFormatterDate",(function(r){return function(t){return D.formatterDate(t.value,r)}})),e(this,"renderCellChips",(function(r){return function(t){var e;return o(m,n(n({},r),{},{value:null!==(e=t.value)&&void 0!==e?e:null==r?void 0:r.value}))}})),e(this,"renderCellStatus",(function(r,t){var e=c(r,n({sx:{minWidth:"90px"}},t));return function(r){return o(e,{value:r.value})}})),e(this,"renderCellBase",(function(r){return function(t){var e=null!=r?r:{},i=e.imageUrl,u=e.valueFormatter,l=a(e,C),s=u?u(t.value,t.row):void 0,c=i?i(t.value,t.row):void 0;return o(f,n(n({value:t.value,valueFormatted:s},l),{},{imageUrl:c}))}})),e(this,"renderCellImage",(function(r,t){return function(e){var n;return o(v,{value:e.value,imageUri:null===(n=r(e.row))||void 0===n?void 0:n.toString(),fallbackSrc:null==t?void 0:t.fallbackSrc})}})),e(this,"renderCellDate",(function(r){return function(t){var e=null!=r?r:{},i=e.formatString,u=a(e,S);return o(h,n(n({},u),{},{value:t.value,formatString:null!=i?i:y}))}}))})));export{D as default};
|
|
2
2
|
//# sourceMappingURL=dino.js.map
|
package/dist/table/dino.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dino.js","sources":["../../src/table/dino.tsx"],"sourcesContent":["import { FC } from 'react'\r\nimport { GridRenderCellParams, GridTreeNodeWithRender, GridValueFormatterParams } from '@mui/x-data-grid'\r\nimport { dayjsCustom } from '../utils'\r\nimport { MapTableBaseContext } from './context'\r\nimport { BtnDetail, BtnFormDetail } from './ui.buttons'\r\nimport { CellBase, CellImageSmall, CellBaseOptions, CellChips, CellChipsProps, CellDate, CellDatePropsOwner } from './ui.units'\r\nimport { Breadcrumbs, IBreadcrumbConfig } from '../components'\r\nimport { CreateStatusCell, IStatusCellOptions, IStatusCellConfig } from './ui.units'\r\nimport ToolbarPannel, { IToolbarPannelProps } from './toolbar-pannel'\r\nimport TableHelper from './helpers'\r\nimport CreateTable from './create.table'\r\nimport CreateActionRow from './create.action-row'\r\n\r\nconst formatDateString = 'MM/DD/YYYY HH:mm'\r\n\r\ntype RenderCellBaseParams<T> = Omit<CellBaseOptions, 'imageUrl'> & {\r\n imageUrl?: (value: any, model: T) => string\r\n valueFormatter?: (value: any, model: T) => string\r\n}\r\n\r\ninterface FormatterDateOptions {\r\n formatString?: string\r\n showRelative?: boolean\r\n}\r\n\r\nclass DinoTableBase {\r\n //#region Base\r\n\r\n createTable = CreateTable\r\n\r\n createActionRow = CreateActionRow\r\n\r\n setUrlQuery = TableHelper.setUrlQuery\r\n\r\n getUrlQuery = TableHelper.getUrlQuery\r\n\r\n mapContext = MapTableBaseContext\r\n\r\n ToolbarPannel = ToolbarPannel\r\n\r\n createToolbar = (props: IToolbarPannelProps): FC<IToolbarPannelProps> => {\r\n return (p) => <ToolbarPannel {...{ ...p, ...props }} />\r\n }\r\n\r\n BtnFormDetail = BtnFormDetail\r\n\r\n BtnDetail = BtnDetail\r\n\r\n createBreadcrumbConfigs = (value: IBreadcrumbConfig[]) => value\r\n\r\n createBreadcrumbs = (value: IBreadcrumbConfig[]): FC => {\r\n return () => <Breadcrumbs value={value} />\r\n }\r\n\r\n createStatusCell = CreateStatusCell\r\n //#endregion\r\n\r\n //#region Value Formatter\r\n formatterDate = (value: any, options?: FormatterDateOptions): string => {\r\n const f = options?.formatString ?? formatDateString\r\n const showRelative = options?.showRelative ?? false\r\n try {\r\n if (!value) return ''\r\n\r\n const date = dayjsCustom(value)\r\n const formatted = date.format(f)\r\n\r\n return showRelative ? `${formatted} (${dayjsCustom().to(date)})` : formatted\r\n } catch (error) {\r\n return ''\r\n }\r\n }\r\n\r\n valueFormatterDate = (options?: FormatterDateOptions) => {\r\n return (params: GridValueFormatterParams<any>) => this.formatterDate(params.value, options)\r\n }\r\n //#endregion\r\n\r\n //#region Render Cell\r\n renderCellChips = (params?: CellChipsProps) => {\r\n return function func(tableRow: GridRenderCellParams<any, any, any, GridTreeNodeWithRender>) {\r\n return <CellChips {...params} value={tableRow.value ?? params?.value} />\r\n }\r\n }\r\n\r\n renderCellStatus = function <E extends string>(config: IStatusCellConfig<E>, options?: IStatusCellOptions) {\r\n const StatusCellInstance = CreateStatusCell(config, { sx: { minWidth: '90px' }, ...options })\r\n return function func(tableRow: GridRenderCellParams<any, any, any, GridTreeNodeWithRender>) {\r\n return <StatusCellInstance value={tableRow.value} />\r\n }\r\n }\r\n\r\n renderCellBase = function <T = any>(options?: RenderCellBaseParams<T>) {\r\n return function func(tableRow: GridRenderCellParams<any, any, any, GridTreeNodeWithRender>) {\r\n const { imageUrl, valueFormatter, ...p } = options ?? {}\r\n const value = valueFormatter ? valueFormatter(tableRow.value, tableRow.row) : undefined\r\n const img = imageUrl ? imageUrl(tableRow.value, tableRow.row) : undefined\r\n return <CellBase value={tableRow.value} valueFormatted={value} {...p} imageUrl={img} />\r\n }\r\n }\r\n\r\n renderCellImage = function <T>(selectImage: (value: T) => T[keyof T], options?: { fallbackSrc?: string }) {\r\n return function func(tableRow: GridRenderCellParams<any, any, any, GridTreeNodeWithRender>) {\r\n return <CellImageSmall value={tableRow.value} imageUri={selectImage(tableRow.row)?.toString()} fallbackSrc={options?.fallbackSrc} />\r\n }\r\n }\r\n\r\n renderCellDate = function (params?: CellDatePropsOwner) {\r\n return function func(tableRow: GridRenderCellParams<any, any, any, GridTreeNodeWithRender>) {\r\n const { formatString, ...props } = params ?? {}\r\n return <CellDate {...props} value={tableRow.value} formatString={formatString ?? formatDateString} />\r\n }\r\n }\r\n //#endregion\r\n}\r\n\r\nconst DinoTable = new DinoTableBase()\r\n\r\nexport default DinoTable\r\n"],"names":["formatDateString","DinoTable","_createClass","DinoTableBase","_this","this","_classCallCheck","_defineProperty","CreateTable","CreateActionRow","TableHelper","setUrlQuery","getUrlQuery","MapTableBaseContext","ToolbarPannel","props","p","_jsx","_objectSpread","BtnFormDetail","BtnDetail","value","Breadcrumbs","CreateStatusCell","options","_options$formatString","_options$showRelative","f","formatString","showRelative","date","dayjsCustom","formatted","format","concat","to","error","params","formatterDate","tableRow","_tableRow$value","CellChips","config","StatusCellInstance","sx","minWidth","_ref","imageUrl","valueFormatter","_objectWithoutProperties","_excluded","row","undefined","img","CellBase","valueFormatted","selectImage","_selectImage","CellImageSmall","imageUri","toString","fallbackSrc","_ref2","_excluded2","CellDate"],"mappings":"
|
|
1
|
+
{"version":3,"file":"dino.js","sources":["../../src/table/dino.tsx"],"sourcesContent":["import { FC } from 'react'\r\nimport { GridRenderCellParams, GridTreeNodeWithRender, GridValueFormatterParams } from '@mui/x-data-grid'\r\nimport { dayjsCustom } from '../utils'\r\nimport { MapTableBaseContext } from './context'\r\nimport { BtnDetail, BtnFormDetail } from './ui.buttons'\r\nimport { CellBase, CellImageSmall, CellBaseOptions, CellChips, CellChipsProps, CellDate, CellDatePropsOwner } from './ui.units'\r\nimport { Breadcrumbs, IBreadcrumbConfig } from '../components'\r\nimport { CreateStatusCell, IStatusCellOptions, IStatusCellConfig } from './ui.units'\r\nimport ToolbarPannel, { IToolbarPannelProps } from './toolbar-pannel'\r\nimport TableHelper from './helpers'\r\nimport CreateTable from './create.table'\r\nimport CreateActionRow from './create.action-row'\r\n\r\nconst formatDateString = 'MM/DD/YYYY HH:mm'\r\n\r\ntype RenderCellBaseParams<T> = Omit<CellBaseOptions, 'imageUrl'> & {\r\n imageUrl?: (value: any, model: T) => string\r\n valueFormatter?: (value: any, model: T) => string\r\n}\r\n\r\ninterface FormatterDateOptions {\r\n formatString?: string\r\n showRelative?: boolean\r\n}\r\n\r\nclass DinoTableBase {\r\n //#region Base\r\n\r\n createTable = CreateTable\r\n\r\n createActionRow = CreateActionRow\r\n\r\n setUrlQuery = TableHelper.setUrlQuery\r\n\r\n getUrlQuery = TableHelper.getUrlQuery\r\n\r\n mapContext = MapTableBaseContext\r\n\r\n ToolbarPannel = ToolbarPannel\r\n\r\n createToolbar = (props: IToolbarPannelProps): FC<IToolbarPannelProps> => {\r\n return (p) => <ToolbarPannel {...{ ...p, ...props }} />\r\n }\r\n\r\n BtnFormDetail = BtnFormDetail\r\n\r\n BtnDetail = BtnDetail\r\n\r\n createBreadcrumbConfigs = (value: IBreadcrumbConfig[]) => value\r\n\r\n createBreadcrumbs = (value: IBreadcrumbConfig[]): FC => {\r\n return () => <Breadcrumbs value={value} />\r\n }\r\n\r\n createStatusCell = CreateStatusCell\r\n //#endregion\r\n\r\n //#region Value Formatter\r\n formatterDate = (value: any, options?: FormatterDateOptions): string => {\r\n const f = options?.formatString ?? formatDateString\r\n const showRelative = options?.showRelative ?? false\r\n try {\r\n if (!value) return ''\r\n\r\n const date = dayjsCustom(value)\r\n const formatted = date.format(f)\r\n\r\n return showRelative ? `${formatted} (${dayjsCustom().to(date)})` : formatted\r\n } catch (error) {\r\n return ''\r\n }\r\n }\r\n\r\n valueFormatterDate = (options?: FormatterDateOptions) => {\r\n return (params: GridValueFormatterParams<any>) => this.formatterDate(params.value, options)\r\n }\r\n //#endregion\r\n\r\n //#region Render Cell\r\n renderCellChips = (params?: CellChipsProps) => {\r\n return function func(tableRow: GridRenderCellParams<any, any, any, GridTreeNodeWithRender>) {\r\n return <CellChips {...params} value={tableRow.value ?? params?.value} />\r\n }\r\n }\r\n\r\n renderCellStatus = function <E extends string>(config: IStatusCellConfig<E>, options?: IStatusCellOptions) {\r\n const StatusCellInstance = CreateStatusCell(config, { sx: { minWidth: '90px' }, ...options })\r\n return function func(tableRow: GridRenderCellParams<any, any, any, GridTreeNodeWithRender>) {\r\n return <StatusCellInstance value={tableRow.value} />\r\n }\r\n }\r\n\r\n renderCellBase = function <T = any>(options?: RenderCellBaseParams<T>) {\r\n return function func(tableRow: GridRenderCellParams<any, any, any, GridTreeNodeWithRender>) {\r\n const { imageUrl, valueFormatter, ...p } = options ?? {}\r\n const value = valueFormatter ? valueFormatter(tableRow.value, tableRow.row) : undefined\r\n const img = imageUrl ? imageUrl(tableRow.value, tableRow.row) : undefined\r\n return <CellBase value={tableRow.value} valueFormatted={value} {...p} imageUrl={img} />\r\n }\r\n }\r\n\r\n renderCellImage = function <T>(selectImage: (value: T) => T[keyof T], options?: { fallbackSrc?: string }) {\r\n return function func(tableRow: GridRenderCellParams<any, any, any, GridTreeNodeWithRender>) {\r\n return <CellImageSmall value={tableRow.value} imageUri={selectImage(tableRow.row)?.toString()} fallbackSrc={options?.fallbackSrc} />\r\n }\r\n }\r\n\r\n renderCellDate = function (params?: CellDatePropsOwner) {\r\n return function func(tableRow: GridRenderCellParams<any, any, any, GridTreeNodeWithRender>) {\r\n const { formatString, ...props } = params ?? {}\r\n return <CellDate {...props} value={tableRow.value} formatString={formatString ?? formatDateString} />\r\n }\r\n }\r\n //#endregion\r\n}\r\n\r\nconst DinoTable = new DinoTableBase()\r\n\r\nexport default DinoTable\r\n"],"names":["formatDateString","DinoTable","_createClass","DinoTableBase","_this","this","_classCallCheck","_defineProperty","CreateTable","CreateActionRow","TableHelper","setUrlQuery","getUrlQuery","MapTableBaseContext","ToolbarPannel","props","p","_jsx","_objectSpread","BtnFormDetail","BtnDetail","value","Breadcrumbs","CreateStatusCell","options","_options$formatString","_options$showRelative","f","formatString","showRelative","date","dayjsCustom","formatted","format","concat","to","error","params","formatterDate","tableRow","_tableRow$value","CellChips","config","StatusCellInstance","sx","minWidth","_ref","imageUrl","valueFormatter","_objectWithoutProperties","_excluded","row","undefined","img","CellBase","valueFormatted","selectImage","_selectImage","CellImageSmall","imageUri","toString","fallbackSrc","_ref2","_excluded2","CellDate"],"mappings":"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"}
|