@revolist/vue3-datagrid 3.2.16 → 3.6.16

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.
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: Issue template
3
+ about: Create a report to help us improve
4
+ title: ''
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Check if issue exists**
11
+ Search the repo and ensure your issue doesn't already exist. If so, it may:
12
+ - Have already been fixed in an unreleased version.
13
+ - Have been closed without a solution. Please create a new issue instead of commenting on the old one.
14
+
15
+ **Describe the issue**
16
+ A clear and concise description of what the issue is.
17
+
18
+ **To Reproduce**
19
+ Create a minimal reproduction to illustrate the issue. Here's a [template](https://codesandbox.io/s/revo-grid-vue3-thry7) to start you off.
@@ -33,7 +33,7 @@ module.exports = {
33
33
  extensions: [ '.tsx', '.ts', '.js', '.vue' ],
34
34
  alias: {
35
35
  'vue$': 'vue/dist/vue.esm-bundler.js',
36
- '@revolist/vue-datagrid': path.resolve(__dirname, '../dist/vgrid')
36
+ '@revolist/vue-datagrid': path.resolve(__dirname, '../src/vgrid')
37
37
  }
38
38
  },
39
39
  module: {
@@ -1,50 +1,14 @@
1
1
  import type { JSX } from '@revolist/revogrid';
2
- import { RevoGrid as RevoGridComponent } from '@revolist/revogrid/custom-element/';
3
- export { RevoGridComponent };
4
- export declare const RevoGrid: import("vue").DefineComponent<JSX.RevoGrid & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevoGrid & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {}>;
5
- export declare const RevogrClipboard: import("vue").DefineComponent<JSX.RevogrClipboard & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrClipboard & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {}>;
6
- export declare const RevogrData: import("vue").DefineComponent<JSX.RevogrData & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrData & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {
7
- rowSelectionStore?: any;
8
- viewportRow?: any;
9
- viewportCol?: any;
10
- dimensionRow?: any;
11
- colData?: any;
12
- dataStore?: any;
13
- }>;
14
- export declare const RevogrEdit: import("vue").DefineComponent<JSX.RevogrEdit & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrEdit & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {}>;
15
- export declare const RevogrFilterPanel: import("vue").DefineComponent<JSX.RevogrFilterPanel & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrFilterPanel & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {}>;
16
- export declare const RevogrFocus: import("vue").DefineComponent<JSX.RevogrFocus & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrFocus & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {
17
- dimensionRow: any;
18
- colData: any;
19
- dataStore: any;
20
- selectionStore: any;
21
- dimensionCol: any;
22
- }>;
23
- export declare const RevogrHeader: import("vue").DefineComponent<JSX.RevogrHeader & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrHeader & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {
24
- viewportCol?: any;
25
- selectionStore?: any;
26
- dimensionCol?: any;
27
- }>;
28
- export declare const RevogrOrderEditor: import("vue").DefineComponent<JSX.RevogrOrderEditor & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrOrderEditor & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {
29
- dimensionRow?: any;
30
- dataStore?: any;
31
- dimensionCol?: any;
32
- }>;
33
- export declare const RevogrOverlaySelection: import("vue").DefineComponent<JSX.RevogrOverlaySelection & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrOverlaySelection & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {
34
- dimensionRow?: any;
35
- colData?: any;
36
- dataStore?: any;
37
- selectionStore?: any;
38
- dimensionCol?: any;
39
- }>;
40
- export declare const RevogrRowHeaders: import("vue").DefineComponent<JSX.RevogrRowHeaders & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrRowHeaders & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {}>;
41
- export declare const RevogrScrollVirtual: import("vue").DefineComponent<JSX.RevogrScrollVirtual & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrScrollVirtual & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {
42
- viewportStore?: any;
43
- dimensionStore?: any;
44
- }>;
45
- export declare const RevogrTempRange: import("vue").DefineComponent<JSX.RevogrTempRange & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrTempRange & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {
46
- dimensionRow?: any;
47
- selectionStore?: any;
48
- dimensionCol?: any;
49
- }>;
50
- export declare const RevogrViewportScroll: import("vue").DefineComponent<JSX.RevogrViewportScroll & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<JSX.RevogrViewportScroll & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {}>;
2
+ export declare const RevoGrid: (props: JSX.RevoGrid & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
3
+ export declare const RevogrClipboard: (props: JSX.RevogrClipboard & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
4
+ export declare const RevogrData: (props: JSX.RevogrData & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
5
+ export declare const RevogrEdit: (props: JSX.RevogrEdit & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
6
+ export declare const RevogrFilterPanel: (props: JSX.RevogrFilterPanel & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
7
+ export declare const RevogrFocus: (props: JSX.RevogrFocus & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
8
+ export declare const RevogrHeader: (props: JSX.RevogrHeader & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
9
+ export declare const RevogrOrderEditor: (props: JSX.RevogrOrderEditor & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
10
+ export declare const RevogrOverlaySelection: (props: JSX.RevogrOverlaySelection & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
11
+ export declare const RevogrRowHeaders: (props: JSX.RevogrRowHeaders & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
12
+ export declare const RevogrScrollVirtual: (props: JSX.RevogrScrollVirtual & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
13
+ export declare const RevogrTempRange: (props: JSX.RevogrTempRange & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
14
+ export declare const RevogrViewportScroll: (props: JSX.RevogrViewportScroll & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
package/dist/vgrid.d.ts CHANGED
@@ -1,9 +1,13 @@
1
1
  import { App } from "vue";
2
- export declare const VGrid: import("vue").DefineComponent<import("@revolist/revogrid/dist/types/components").JSX.RevoGrid & import("./vue-component-lib/utils").InputProps<string | number | boolean>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("@revolist/revogrid/dist/types/components").JSX.RevoGrid & import("./vue-component-lib/utils").InputProps<string | number | boolean>>, {}>;
2
+ export declare const VGrid: (props: import("@revolist/revogrid/dist/types/components").JSX.RevoGrid & import("./vue-component-lib/utils").InputProps<string | number | boolean> & {}) => any;
3
3
  export declare const VGridPlugin: {
4
4
  install(app: App): void;
5
5
  };
6
6
  export declare const VGridVueTemplate: (vueConstructor: any) => (h: import("@revolist/revogrid/dist/types/interfaces").RevoGrid.HyperFunc<import("@revolist/revogrid/dist/types/stencil-public-runtime").VNode>, p: import("@revolist/revogrid/dist/types/interfaces").RevoGrid.ColumnDataSchemaModel) => JSX.Element;
7
- export declare const VGridVueTemplateConstructor: (vueConstructor: import("vue").DefineComponent<{}, {}, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}>, e: HTMLElement, p: Record<string, any>) => any;
7
+ export declare const VGridVueTemplateConstructor: (vueConstructor: import("vue").DefineComponent, el: import("./vue-template").VueElement, p: Record<string, any>, appContext: any) => {
8
+ vueInstance: any;
9
+ destroy: () => void;
10
+ el: import("./vue-template").VueElement;
11
+ };
8
12
  export declare const VGridVueEditor: (vueConstructor: any) => (column: import("@revolist/revogrid/dist/types/interfaces").RevoGrid.ColumnDataSchemaModel, save: Function, close: Function) => import("./vue-editor-adapter").default;
9
13
  export default VGrid;
package/dist/vgrid.js CHANGED
@@ -1 +1 @@
1
- !function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r(require("vue"),require("@revolist/revogrid/custom-element/")):"function"==typeof define&&define.amd?define("VGrid",["vue","@revolist/revogrid/custom-element/"],r):"object"==typeof exports?exports.VGrid=r(require("vue"),require("@revolist/revogrid/custom-element/")):e.VGrid=r(e.vue,e["@revolist/revogrid/custom-element/"])}(self,((e,r)=>(()=>{"use strict";var o={863:e=>{e.exports=r},748:r=>{r.exports=e}},t={};function n(e){var r=t[e];if(void 0!==r)return r.exports;var s=t[e]={exports:{}};return o[e](s,s.exports,n),s.exports}n.d=(e,r)=>{for(var o in r)n.o(r,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},n.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var s={};return(()=>{n.r(s),n.d(s,{VGrid:()=>f,VGridPlugin:()=>v,VGridVueEditor:()=>g,VGridVueTemplate:()=>m,VGridVueTemplateConstructor:()=>b,default:()=>h});var e=n(748);const r="update:modelValue",o=Symbol(),t={default:o},i=e=>(null==e?void 0:e.split(" "))||[],l=(e,r,o=[])=>{var t;return[...Array.from((null===(t=e.value)||void 0===t?void 0:t.classList)||[]),...o].filter(((e,o,t)=>!r.has(e)&&t.indexOf(e)===o))},a=(n,s,a=[],u,d,c)=>{void 0!==s&&s();const f=(0,e.defineComponent)(((t,{attrs:s,slots:a,emit:f})=>{var p;let v=t[u];const m=(0,e.ref)(),b=new Set(i(s.class)),g=e=>{e.el&&(Array.isArray(d)?d:[d]).forEach((o=>{e.el.addEventListener(o.toLowerCase(),(e=>{v=(null==e?void 0:e.target)[u],f(r,v),c&&f(c,e)}))}))},h=(0,e.getCurrentInstance)(),y=(null===(p=null==h?void 0:h.appContext)||void 0===p?void 0:p.provides.navManager)?(0,e.inject)("navManager"):void 0;return()=>{v=t[u],i(s.class).forEach((e=>{b.add(e)}));const r=t.onClick;let c={ref:m,class:l(m,b),onClick:e=>{void 0!==r&&r(e),e.defaultPrevented||(e=>{const{routerLink:r}=t;if(r!==o)if(void 0!==y){let r={event:e};for(const e in t){const n=t[e];t.hasOwnProperty(e)&&e.startsWith("router")&&n!==o&&(r[e]=n)}y.navigate(r)}else console.warn("Tried to navigate, but no router was found. Make sure you have mounted Vue Router.")})(e)},onVnodeBeforeMount:d?g:void 0};for(const e in t){const r=t[e];t.hasOwnProperty(e)&&r!==o&&(c[e]=r)}return u&&(t.modelValue!==o?c=Object.assign(Object.assign({},c),{[u]:t.modelValue}):v!==o&&(c=Object.assign(Object.assign({},c),{[u]:v}))),(0,e.h)(n,c,a.default&&a.default())}}));return f.displayName=n,f.props={routerLink:t},a.forEach((e=>{f.props[e]=t})),u&&(f.props.modelValue=t,f.emits=[r,c]),f};n(863);const u=a("revo-grid",void 0,["rowHeaders","frameSize","rowSize","colSize","range","readonly","resize","canFocus","useClipboard","columns","source","pinnedTopSource","pinnedBottomSource","rowDefinitions","editors","plugins","columnTypes","theme","rowClass","autoSizeColumn","filter","canMoveColumns","trimmedRows","exporting","grouping","stretch","beforeedit","beforerangeedit","afteredit","beforeautofill","beforeaange","afterfocus","roworderchanged","beforesourcesortingapply","beforesortingapply","beforesorting","rowdragstart","headerclick","beforecellfocus","beforefocuslost","beforesourceset","aftersourceset","beforecolumnsset","beforecolumnapplied","aftercolumnsset","beforefilterapply","beforefiltertrimmed","beforetrimmed","aftertrimmed","viewportscroll","beforeexport","beforeeditstart","aftercolumnresize"]),d=(r,o,t)=>{if(!o)return null;let n;(null==o?void 0:o.childNodes.length)&&(n=o.childNodes[0]),n||(n=document.createElement("span"),o.appendChild(n));let s=n._vnode;if(s)for(const e in t)s.component.props[e]=t[e];else{const o=(0,e.createVNode)(r,t);(0,e.render)(o,n)}return s};class c{constructor(e,r,o,t){this.VueEditorConstructor=e,this.column=r,this.save=o,this.close=t,this.element=null,this.editCell=null}componentDidRender(){}disconnectedCallback(){var e;null===(e=this.vueEl)||void 0===e||e.$destroy(),this.vueEl=void 0}render(e){return e("span",{ref:e=>{this.vueEl=d(this.VueEditorConstructor,e,Object.assign(Object.assign({},this.editCell),{column:this.column,save:this.save,close:this.close}))}})}}const f=u;let p=!1;const v={install(e){p||(p=!0,e.component("vue-data-grid",f))}},m=e=>(r,o)=>r("span",{ref:r=>d(e,r,o)}),b=d,g=e=>function(r,o,t){return new c(e,r,o,t)},h=u})(),s})()));
1
+ !function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r(require("vue"),require("@revolist/revogrid/loader")):"function"==typeof define&&define.amd?define("VGrid",["vue","@revolist/revogrid/loader"],r):"object"==typeof exports?exports.VGrid=r(require("vue"),require("@revolist/revogrid/loader")):e.VGrid=r(e.vue,e["@revolist/revogrid/loader"])}(self,((e,r)=>(()=>{"use strict";var t,o,n,s,a={941:(e,r,t)=>{t.a(e,(async(e,o)=>{try{t.d(r,{d_:()=>e});var n=t(638),s=t(829);await(0,s.defineCustomElements)();const e=(0,n.j)("revo-grid",void 0,["rowHeaders","frameSize","rowSize","colSize","range","readonly","resize","canFocus","useClipboard","columns","source","pinnedTopSource","pinnedBottomSource","rowDefinitions","editors","plugins","columnTypes","theme","rowClass","autoSizeColumn","filter","canMoveColumns","trimmedRows","exporting","grouping","stretch","beforeedit","beforerangeedit","afteredit","beforeautofill","beforeaange","afterfocus","roworderchanged","beforesourcesortingapply","beforesortingapply","beforesorting","rowdragstart","headerclick","beforecellfocus","beforefocuslost","beforesourceset","aftersourceset","beforecolumnsset","beforecolumnapplied","aftercolumnsset","beforefilterapply","beforefiltertrimmed","beforetrimmed","aftertrimmed","viewportscroll","beforeexport","beforeeditstart","aftercolumnresize"]);o()}catch(e){o(e)}}),1)},846:(e,r,t)=>{t.a(e,(async(e,o)=>{try{t.r(r),t.d(r,{VGrid:()=>l,VGridPlugin:()=>d,VGridVueEditor:()=>p,VGridVueTemplate:()=>c,VGridVueTemplateConstructor:()=>f,default:()=>v});var n=t(941),s=t(258),a=t(210),i=e([n]);const l=(n=(i.then?(await i)():i)[0]).d_;let u=!1;const d={install(e){u||(u=!0,e.component("vue-data-grid",l))}},c=s.Z,f=s.k,p=a.Z,v=l;o()}catch(e){o(e)}}))},638:(e,r,t)=>{t.d(r,{j:()=>c});var o=t(748);const n="update:modelValue",s="modelValue",a="navManager",i=Symbol(),l={default:i},u=e=>(null==e?void 0:e.split(" "))||[],d=(e,r,t=[])=>{var o;return[...Array.from((null===(o=e.value)||void 0===o?void 0:o.classList)||[]),...t].filter(((e,t,o)=>!r.has(e)&&o.indexOf(e)===t))},c=(e,r,t=[],c,f,p)=>{void 0!==r&&r();const v=(0,o.defineComponent)(((r,{attrs:t,slots:l,emit:v})=>{var m;let b=r[c];const h=(0,o.ref)(),y=new Set(u(t.class)),g=e=>{e.el&&(Array.isArray(f)?f:[f]).forEach((r=>{e.el.addEventListener(r.toLowerCase(),(e=>{b=(null==e?void 0:e.target)[c],v(n,b),p&&v(p,e)}))}))},w=(0,o.getCurrentInstance)(),C=(null===(m=null==w?void 0:w.appContext)||void 0===m?void 0:m.provides[a])?(0,o.inject)(a):void 0;return()=>{b=r[c],u(t.class).forEach((e=>{y.add(e)}));const n=r.onClick;let a={ref:h,class:d(h,y),onClick:e=>{void 0!==n&&n(e),e.defaultPrevented||(e=>{const{routerLink:t}=r;if(t!==i)if(void 0!==C){let t={event:e};for(const e in r){const o=r[e];r.hasOwnProperty(e)&&e.startsWith("router")&&o!==i&&(t[e]=o)}C.navigate(t)}else console.warn("Tried to navigate, but no router was found. Make sure you have mounted Vue Router.")})(e)},onVnodeBeforeMount:f?g:void 0};for(const e in r){const t=r[e];(r.hasOwnProperty(e)&&t!==i||e.startsWith("aria"))&&(a[e]=t)}return c&&(r[s]!==i?a=Object.assign(Object.assign({},a),{[c]:r[s]}):b!==i&&(a=Object.assign(Object.assign({},a),{[c]:b}))),(0,o.h)(e,a,l.default&&l.default())}}));return"function"!=typeof v&&(v.name=e,v.props={routerLink:l},t.forEach((e=>{v.props[e]=l})),c&&(v.props[s]=l,v.emits=[n,p])),v}},210:(e,r,t)=>{t.d(r,{Z:()=>a});var o=t(748),n=t(258);class s{constructor(e,r,t,o,n){this.VueEditorConstructor=e,this.column=r,this.save=t,this.close=o,this.appContext=n,this.element=null,this.editCell=null}componentDidRender(){}disconnectedCallback(){this.vueEl&&(this.vueEl.destroy(),this.vueEl=void 0)}render(e){return e("span",{ref:e=>{this.vueEl=(0,n.k)(this.VueEditorConstructor,e,Object.assign(Object.assign({},this.editCell),{column:this.column,save:this.save,close:this.close}),this.appContext)}})}}const a=e=>{const r=(0,o.getCurrentInstance)(),t=null==r?void 0:r.appContext;return function(r,o,n){return new s(e,r,o,n,t)}}},258:(e,r,t)=>{t.d(r,{Z:()=>s,k:()=>n});var o=t(748);const n=(e,r,t,n)=>{if(!r)return null;let s=r._vnode;if(s){n&&(s.appContext=n);for(const e in t)s.component.props[e]=t[e]}else s=(0,o.createVNode)(e,t),n&&(s.appContext=n),(0,o.render)(s,r);return{vueInstance:s,destroy:()=>(0,o.render)(null,r),el:r}},s=e=>{const r=(0,o.getCurrentInstance)(),t=null==r?void 0:r.appContext;return(r,o)=>r("span",{ref:r=>n(e,r,o,t)})}},829:e=>{e.exports=r},748:r=>{r.exports=e}},i={};function l(e){var r=i[e];if(void 0!==r)return r.exports;var t=i[e]={exports:{}};return a[e](t,t.exports,l),t.exports}return t="function"==typeof Symbol?Symbol("webpack queues"):"__webpack_queues__",o="function"==typeof Symbol?Symbol("webpack exports"):"__webpack_exports__",n="function"==typeof Symbol?Symbol("webpack error"):"__webpack_error__",s=e=>{e&&e.d<1&&(e.d=1,e.forEach((e=>e.r--)),e.forEach((e=>e.r--?e.r++:e())))},l.a=(e,r,a)=>{var i;a&&((i=[]).d=-1);var l,u,d,c=new Set,f=e.exports,p=new Promise(((e,r)=>{d=r,u=e}));p[o]=f,p[t]=e=>(i&&e(i),c.forEach(e),p.catch((e=>{}))),e.exports=p,r((e=>{var r;l=(e=>e.map((e=>{if(null!==e&&"object"==typeof e){if(e[t])return e;if(e.then){var r=[];r.d=0,e.then((e=>{a[o]=e,s(r)}),(e=>{a[n]=e,s(r)}));var a={};return a[t]=e=>e(r),a}}var i={};return i[t]=e=>{},i[o]=e,i})))(e);var a=()=>l.map((e=>{if(e[n])throw e[n];return e[o]})),u=new Promise((e=>{(r=()=>e(a)).r=0;var o=e=>e!==i&&!c.has(e)&&(c.add(e),e&&!e.d&&(r.r++,e.push(r)));l.map((e=>e[t](o)))}));return r.r?u:a()}),(e=>(e?d(p[n]=e):u(f),s(i)))),i&&i.d<0&&(i.d=0)},l.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return l.d(r,{a:r}),r},l.d=(e,r)=>{for(var t in r)l.o(r,t)&&!l.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},l.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),l.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l(846)})()));
@@ -15,6 +15,4 @@ export interface InputProps<T> {
15
15
  * @prop externalModelUpdateEvent - The external event to fire from your Vue component when modelUpdateEvent fires. This is used for ensuring that v-model references have been
16
16
  * correctly updated when a user's event callback fires.
17
17
  */
18
- export declare const defineContainer: <Props, VModelType = string | number | boolean>(name: string, defineCustomElement: any, componentProps?: string[], modelProp?: string, modelUpdateEvent?: string, externalModelUpdateEvent?: string) => import("vue").DefineComponent<Props & InputProps<VModelType>, object, {}, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<Props & InputProps<VModelType> extends infer T ? T extends Props & InputProps<VModelType> ? T extends import("vue").ComponentPropsOptions<{
19
- [x: string]: unknown;
20
- }> ? import("vue").ExtractPropTypes<T> : T : never : never>, import("vue").ExtractDefaultPropTypes<Props & InputProps<VModelType>>>;
18
+ export declare const defineContainer: <Props, VModelType = string | number | boolean>(name: string, defineCustomElement: any, componentProps?: string[], modelProp?: string, modelUpdateEvent?: string, externalModelUpdateEvent?: string) => (props: Props & InputProps<VModelType> & {}) => any;
@@ -6,10 +6,11 @@ export default class VueEditorAdapter {
6
6
  column: RevoGrid.ColumnDataSchemaModel;
7
7
  private save;
8
8
  private close;
9
+ private appContext;
9
10
  element: Element | null;
10
11
  editCell: Edition.EditCell | null;
11
12
  private vueEl;
12
- constructor(VueEditorConstructor: DefineComponent, column: RevoGrid.ColumnDataSchemaModel, save: Function, close: Function);
13
+ constructor(VueEditorConstructor: DefineComponent, column: RevoGrid.ColumnDataSchemaModel, save: Function, close: Function, appContext: Object);
13
14
  componentDidRender(): void;
14
15
  disconnectedCallback(): void;
15
16
  render(h: RevoGrid.HyperFunc<VNode>): JSX.Element;
@@ -1,6 +1,13 @@
1
1
  import { RevoGrid } from '@revolist/revogrid/dist/types/interfaces';
2
2
  import { VNode } from '@revolist/revogrid/dist/types/stencil-public-runtime';
3
- import { DefineComponent } from 'vue';
4
- export declare const vueTemplateConstructor: (vueConstructor: DefineComponent, e: HTMLElement | null, p: Record<string, any>) => any;
3
+ import { ComponentPublicInstance, DefineComponent } from "vue";
4
+ export interface VueElement extends HTMLElement {
5
+ _vnode?: ComponentPublicInstance<any>;
6
+ }
7
+ export declare const vueTemplateConstructor: (vueConstructor: DefineComponent, el: VueElement | null, p: Record<string, any>, appContext: any) => {
8
+ vueInstance: any;
9
+ destroy: () => void;
10
+ el: VueElement;
11
+ };
5
12
  declare const vueTemplate: (vueConstructor: any) => (h: RevoGrid.HyperFunc<VNode>, p: RevoGrid.ColumnDataSchemaModel) => JSX.Element;
6
13
  export default vueTemplate;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@revolist/vue3-datagrid",
3
- "version": "3.2.16",
3
+ "version": "3.6.16",
4
4
  "description": "Vue 3 DataGrid Spreadsheet",
5
5
  "main": "dist/vgrid.js",
6
6
  "types": "dist/vgrid.d.ts",
@@ -34,24 +34,24 @@
34
34
  "homepage": "https://github.com/revolist/vue3-datagrid#readme",
35
35
  "license": "MIT",
36
36
  "dependencies": {
37
- "@revolist/revogrid": "^3.2.16",
37
+ "@revolist/revogrid": "^3.6.16",
38
38
  "@stencil/core": "^2.17.3"
39
39
  },
40
40
  "devDependencies": {
41
- "@vue/compiler-sfc": "^3.2.37",
41
+ "@vue/compiler-sfc": "^3.3.4",
42
42
  "clean-webpack-plugin": "^4.0.0",
43
43
  "css-loader": "^6.7.1",
44
- "html-webpack-plugin": "^5.5.0",
45
- "sass": "^1.54.4",
46
- "sass-loader": "^13.0.2",
47
- "style-loader": "^3.3.1",
48
- "ts-loader": "^9.3.1",
49
- "typescript": "^4.7.4",
50
- "vue": "^3.2.37",
51
- "vue-loader": "^17.0.0",
44
+ "html-webpack-plugin": "^5.5.3",
45
+ "sass": "^1.64.2",
46
+ "sass-loader": "^13.3.2",
47
+ "style-loader": "^3.3.3",
48
+ "ts-loader": "^9.4.4",
49
+ "typescript": "^5.1.6",
50
+ "vue": "^3.3.4",
51
+ "vue-loader": "^17.2.2",
52
52
  "vue-style-loader": "^4.1.3",
53
- "webpack": "^5.74.0",
54
- "webpack-cli": "^4.10.0",
55
- "webpack-dev-server": "^4.10.0"
53
+ "webpack": "^5.88.2",
54
+ "webpack-cli": "^5.1.4",
55
+ "webpack-dev-server": "^4.15.1"
56
56
  }
57
57
  }
package/public/App.vue CHANGED
@@ -1,10 +1,9 @@
1
1
  <template>
2
2
  <div class="tile large">
3
3
  <v-grid
4
- ref="grid"
5
- readonly="false"
4
+ :readonly="false"
6
5
  :source="source"
7
- resize="false"
6
+ :resize="false"
8
7
  :columns="headers"
9
8
  :editors="gridEditors"
10
9
  theme="material"
@@ -16,8 +15,7 @@
16
15
  <script lang="ts">
17
16
  // beforeCellFocus
18
17
  import {defineComponent, ref} from 'vue';
19
- import {Components} from '@revolist/revogrid';
20
- import VGrid, { VGridVueEditor, VGridVueTemplate } from '@revolist/vue-datagrid';
18
+ import VGrid, { VGridVueEditor, VGridVueTemplate } from '../src/vgrid';
21
19
  import Editor from './Editor.vue';
22
20
  import Cell from './Cell.vue';
23
21
  import {generateFakeDataObject} from './dataService';
@@ -34,8 +32,7 @@ export default defineComponent({
34
32
  setup() {
35
33
  const button = VGridVueEditor(Editor);
36
34
  const gridEditors = { button };
37
- const grid = ref<Components.RevoGrid|null>(null);
38
- return { grid, gridEditors };
35
+ return { gridEditors };
39
36
  },
40
37
  methods: {
41
38
  test(e: CustomEvent) {
@@ -18,7 +18,7 @@ function naturalSort(prop,a,b) {
18
18
  }
19
19
 
20
20
  export function generateFakeDataObject(rowsNumber: number, colsNumber: number, cellTemplate: any) {
21
- const result: Record<any, any> = [];
21
+ const result: any[] = [];
22
22
  const columns: Record<number, any> = {};
23
23
  const all = colsNumber * rowsNumber;
24
24
  for (let j = 0; j < all; j++) {
package/src/revogrid.ts CHANGED
@@ -5,9 +5,9 @@ import { defineContainer } from './vue-component-lib/utils';
5
5
 
6
6
  import type { JSX } from '@revolist/revogrid';
7
7
 
8
- import { RevoGrid as RevoGridComponent } from '@revolist/revogrid/custom-element/';
8
+ import { defineCustomElements } from '@revolist/revogrid/loader';
9
9
 
10
- export {RevoGridComponent};
10
+ await defineCustomElements();
11
11
 
12
12
  export const RevoGrid = /*@__PURE__*/ defineContainer<JSX.RevoGrid>('revo-grid', undefined, [
13
13
  'rowHeaders',
@@ -164,6 +164,7 @@ export const RevogrOverlaySelection = /*@__PURE__*/ defineContainer<JSX.RevogrOv
164
164
  'internalCellEdit',
165
165
  'internalFocusCell',
166
166
  'setEdit',
167
+ 'cancelEdit',
167
168
  'setRange',
168
169
  'setTempRange',
169
170
  'focusCell',
package/src/vgrid.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { App, defineAsyncComponent } from "vue";
2
- import {RevoGrid} from "./revogrid";
3
- import vueTemplate, {vueTemplateConstructor} from "./vue-template";
1
+ import { App } from "vue";
2
+ import { RevoGrid } from "./revogrid";
3
+ import vueTemplate, { vueTemplateConstructor } from "./vue-template";
4
4
  import vueEditor from "./vue-editor";
5
5
 
6
6
  export const VGrid = RevoGrid;
@@ -13,8 +13,8 @@ export const VGridPlugin = {
13
13
  return;
14
14
  }
15
15
  installed = true;
16
- app.component('vue-data-grid', VGrid);
17
- }
16
+ app.component("vue-data-grid", VGrid);
17
+ },
18
18
  };
19
19
 
20
20
  // Vue template wrapper for virtual nodes
@@ -26,6 +26,4 @@ export const VGridVueTemplateConstructor = vueTemplateConstructor;
26
26
  // Vue editor wrapper
27
27
  export const VGridVueEditor = vueEditor;
28
28
 
29
-
30
29
  export default VGrid;
31
-
@@ -1,3 +1,5 @@
1
+ // @ts-nocheck
2
+ // It's easier and safer for Volar to disable typechecking and let the return type inference do its job.
1
3
  import { VNode, defineComponent, getCurrentInstance, h, inject, ref, Ref } from 'vue';
2
4
 
3
5
  export interface InputProps<T> {
@@ -9,7 +11,7 @@ const MODEL_VALUE = 'modelValue';
9
11
  const ROUTER_LINK_VALUE = 'routerLink';
10
12
  const NAV_MANAGER = 'navManager';
11
13
  const ROUTER_PROP_PREFIX = 'router';
12
-
14
+ const ARIA_PROP_PREFIX = 'aria';
13
15
  /**
14
16
  * Starting in Vue 3.1.0, all properties are
15
17
  * added as keys to the props object, even if
@@ -30,26 +32,31 @@ const getComponentClasses = (classes: unknown) => {
30
32
  return (classes as string)?.split(' ') || [];
31
33
  };
32
34
 
33
- const getElementClasses = (ref: Ref<HTMLElement | undefined>, componentClasses: Set<string>, defaultClasses: string[] = []) => {
34
- return [ ...Array.from(ref.value?.classList || []), ...defaultClasses ]
35
- .filter((c: string, i, self) => !componentClasses.has(c) && self.indexOf(c) === i);
35
+ const getElementClasses = (
36
+ ref: Ref<HTMLElement | undefined>,
37
+ componentClasses: Set<string>,
38
+ defaultClasses: string[] = []
39
+ ) => {
40
+ return [...Array.from(ref.value?.classList || []), ...defaultClasses].filter(
41
+ (c: string, i, self) => !componentClasses.has(c) && self.indexOf(c) === i
42
+ );
36
43
  };
37
44
 
38
45
  /**
39
- * Create a callback to define a Vue component wrapper around a Web Component.
40
- *
41
- * @prop name - The component tag name (i.e. `ion-button`)
42
- * @prop componentProps - An array of properties on the
43
- * component. These usually match up with the @Prop definitions
44
- * in each component's TSX file.
45
- * @prop customElement - An option custom element instance to pass
46
- * to customElements.define. Only set if `includeImportCustomElements: true` in your config.
47
- * @prop modelProp - The prop that v-model binds to (i.e. value)
48
- * @prop modelUpdateEvent - The event that is fired from your Web Component when the value changes (i.e. ionChange)
49
- * @prop externalModelUpdateEvent - The external event to fire from your Vue component when modelUpdateEvent fires. This is used for ensuring that v-model references have been
50
- * correctly updated when a user's event callback fires.
51
- */
52
- export const defineContainer = <Props, VModelType=string|number|boolean>(
46
+ * Create a callback to define a Vue component wrapper around a Web Component.
47
+ *
48
+ * @prop name - The component tag name (i.e. `ion-button`)
49
+ * @prop componentProps - An array of properties on the
50
+ * component. These usually match up with the @Prop definitions
51
+ * in each component's TSX file.
52
+ * @prop customElement - An option custom element instance to pass
53
+ * to customElements.define. Only set if `includeImportCustomElements: true` in your config.
54
+ * @prop modelProp - The prop that v-model binds to (i.e. value)
55
+ * @prop modelUpdateEvent - The event that is fired from your Web Component when the value changes (i.e. ionChange)
56
+ * @prop externalModelUpdateEvent - The external event to fire from your Vue component when modelUpdateEvent fires. This is used for ensuring that v-model references have been
57
+ * correctly updated when a user's event callback fires.
58
+ */
59
+ export const defineContainer = <Props, VModelType = string | number | boolean>(
53
60
  name: string,
54
61
  defineCustomElement: any,
55
62
  componentProps: string[] = [],
@@ -58,16 +65,16 @@ export const defineContainer = <Props, VModelType=string|number|boolean>(
58
65
  externalModelUpdateEvent?: string
59
66
  ) => {
60
67
  /**
61
- * Create a Vue component wrapper around a Web Component.
62
- * Note: The `props` here are not all properties on a component.
63
- * They refer to whatever properties are set on an instance of a component.
64
- */
68
+ * Create a Vue component wrapper around a Web Component.
69
+ * Note: The `props` here are not all properties on a component.
70
+ * They refer to whatever properties are set on an instance of a component.
71
+ */
65
72
 
66
73
  if (defineCustomElement !== undefined) {
67
74
  defineCustomElement();
68
75
  }
69
76
 
70
- const Container = defineComponent<Props & InputProps<VModelType>>((props: any, { attrs, slots, emit }) => {
77
+ const Container = defineComponent<Props & InputProps<VModelType>>((props, { attrs, slots, emit }) => {
71
78
  let modelPropValue = props[modelProp];
72
79
  const containerRef = ref<HTMLElement>();
73
80
  const classes = new Set(getComponentClasses(attrs.class));
@@ -116,12 +123,12 @@ export const defineContainer = <Props, VModelType=string|number|boolean>(
116
123
  } else {
117
124
  console.warn('Tried to navigate, but no router was found. Make sure you have mounted Vue Router.');
118
125
  }
119
- }
126
+ };
120
127
 
121
128
  return () => {
122
129
  modelPropValue = props[modelProp];
123
130
 
124
- getComponentClasses(attrs.class).forEach(value => {
131
+ getComponentClasses(attrs.class).forEach((value) => {
125
132
  classes.add(value);
126
133
  });
127
134
 
@@ -133,13 +140,13 @@ export const defineContainer = <Props, VModelType=string|number|boolean>(
133
140
  if (!ev.defaultPrevented) {
134
141
  handleRouterLink(ev);
135
142
  }
136
- }
143
+ };
137
144
 
138
145
  let propsToAdd: any = {
139
146
  ref: containerRef,
140
147
  class: getElementClasses(containerRef, classes),
141
148
  onClick: handleClick,
142
- onVnodeBeforeMount: (modelUpdateEvent) ? onVnodeBeforeMount : undefined
149
+ onVnodeBeforeMount: modelUpdateEvent ? onVnodeBeforeMount : undefined,
143
150
  };
144
151
 
145
152
  /**
@@ -150,7 +157,7 @@ export const defineContainer = <Props, VModelType=string|number|boolean>(
150
157
  */
151
158
  for (const key in props) {
152
159
  const value = props[key];
153
- if (props.hasOwnProperty(key) && value !== EMPTY_PROP) {
160
+ if ((props.hasOwnProperty(key) && value !== EMPTY_PROP) || key.startsWith(ARIA_PROP_PREFIX)) {
154
161
  propsToAdd[key] = value;
155
162
  }
156
163
  }
@@ -165,33 +172,35 @@ export const defineContainer = <Props, VModelType=string|number|boolean>(
165
172
  if (props[MODEL_VALUE] !== EMPTY_PROP) {
166
173
  propsToAdd = {
167
174
  ...propsToAdd,
168
- [modelProp]: props[MODEL_VALUE]
169
- }
175
+ [modelProp]: props[MODEL_VALUE],
176
+ };
170
177
  } else if (modelPropValue !== EMPTY_PROP) {
171
178
  propsToAdd = {
172
179
  ...propsToAdd,
173
- [modelProp]: modelPropValue
174
- }
180
+ [modelProp]: modelPropValue,
181
+ };
175
182
  }
176
183
  }
177
184
 
178
185
  return h(name, propsToAdd, slots.default && slots.default());
179
- }
186
+ };
180
187
  });
181
188
 
182
- Container.displayName = name;
189
+ if (typeof Container !== 'function') {
190
+ Container.name = name;
183
191
 
184
- Container.props = {
185
- [ROUTER_LINK_VALUE]: DEFAULT_EMPTY_PROP
186
- };
192
+ Container.props = {
193
+ [ROUTER_LINK_VALUE]: DEFAULT_EMPTY_PROP,
194
+ };
187
195
 
188
- componentProps.forEach(componentProp => {
189
- Container.props[componentProp] = DEFAULT_EMPTY_PROP;
190
- });
196
+ componentProps.forEach((componentProp) => {
197
+ Container.props[componentProp] = DEFAULT_EMPTY_PROP;
198
+ });
191
199
 
192
- if (modelProp) {
193
- Container.props[MODEL_VALUE] = DEFAULT_EMPTY_PROP;
194
- Container.emits = [UPDATE_VALUE_EVENT, externalModelUpdateEvent];
200
+ if (modelProp) {
201
+ Container.props[MODEL_VALUE] = DEFAULT_EMPTY_PROP;
202
+ Container.emits = [UPDATE_VALUE_EVENT, externalModelUpdateEvent];
203
+ }
195
204
  }
196
205
 
197
206
  return Container;
@@ -12,7 +12,8 @@ export default class VueEditorAdapter {
12
12
  private VueEditorConstructor: DefineComponent,
13
13
  public column: RevoGrid.ColumnDataSchemaModel,
14
14
  private save: Function,
15
- private close: Function
15
+ private close: Function,
16
+ private appContext: Object
16
17
  ) {}
17
18
 
18
19
  // optional, called after editor rendered
@@ -20,8 +21,10 @@ export default class VueEditorAdapter {
20
21
 
21
22
  // optional, called after editor destroyed
22
23
  disconnectedCallback() {
23
- this.vueEl?.$destroy();
24
- this.vueEl = undefined;
24
+ if (this.vueEl) {
25
+ this.vueEl.destroy();
26
+ this.vueEl = undefined;
27
+ }
25
28
  }
26
29
 
27
30
  render(h: RevoGrid.HyperFunc<VNode>) {
@@ -31,6 +34,6 @@ export default class VueEditorAdapter {
31
34
  column: this.column,
32
35
  save: this.save,
33
36
  close: this.close
34
- })}}/>;
37
+ }, this.appContext)}}/>;
35
38
  }
36
- }
39
+ }
@@ -1,11 +1,14 @@
1
- import {RevoGrid} from "@revolist/revogrid/dist/types/interfaces";
1
+ import {RevoGrid, Edition} from "@revolist/revogrid/dist/types/interfaces";
2
+ import { getCurrentInstance } from "vue";
2
3
  import VueEditorAdapter from './vue-editor-adapter';
3
4
 
4
5
 
5
- const vueEditor = (vueConstructor: any) => {
6
+ const vueEditor = (vueConstructor: any): Edition.EditorCtr => {
7
+ const current = getCurrentInstance();
8
+ const appContext = current?.appContext;
6
9
  return function(column: RevoGrid.ColumnDataSchemaModel, save: Function, close: Function) {
7
- return new VueEditorAdapter(vueConstructor, column, save, close);
8
- }
10
+ return new VueEditorAdapter(vueConstructor, column, save, close, appContext);
11
+ } as unknown as Edition.EditorCtr;
9
12
  };
10
13
 
11
14
  export default vueEditor;
@@ -1,43 +1,41 @@
1
1
  import { RevoGrid } from '@revolist/revogrid/dist/types/interfaces';
2
2
  import { VNode } from '@revolist/revogrid/dist/types/stencil-public-runtime';
3
- import { ComponentPublicInstance, createVNode, DefineComponent, render } from 'vue';
3
+ import { ComponentPublicInstance, createVNode, DefineComponent, render, getCurrentInstance } from "vue";
4
4
 
5
5
 
6
- interface VueElement extends HTMLElement {
6
+ export interface VueElement extends HTMLElement {
7
7
  _vnode?: ComponentPublicInstance<any>;
8
8
  }
9
9
  export const vueTemplateConstructor =
10
- (vueConstructor: DefineComponent, e: HTMLElement|null, p: Record<string, any>) => {
11
- if (!e) {
12
- return null;
13
- }
14
- let el: VueElement|undefined;
15
- if (e?.childNodes.length) {
16
- el = e.childNodes[0] as VueElement;
17
- }
18
-
19
- if (!el) {
20
- // create dom element wrapper for vue instance
21
- el = document.createElement('span');
22
- e.appendChild(el);
23
- }
24
- // check, probably vue instance already inited
25
- let vueInstance = el._vnode;
26
- // if exists, return
27
- if (vueInstance) {
28
- // if vue inited just update it's properties
29
- for (const k in p) {
30
- vueInstance.component.props[k] = p[k];
31
- }
32
- } else {
33
- const vNode = createVNode(vueConstructor, p);
34
- render(vNode, el);
10
+ (vueConstructor: DefineComponent, el: VueElement|null, p: Record<string, any>, appContext: any) => {
11
+ if (!el) {
12
+ return null;
13
+ }
14
+
15
+ // check, probably vue instance already inited
16
+ let vNode = el._vnode;
17
+ // if exists, return
18
+ if (vNode) {
19
+ if (appContext) vNode.appContext = appContext;
20
+ // if vue inited just update it's properties
21
+ for (const k in p) {
22
+ vNode.component.props[k] = p[k];
35
23
  }
36
- return vueInstance;
37
- };
24
+ } else {
25
+ vNode = createVNode(vueConstructor, p);
26
+ if (appContext) vNode.appContext = appContext;
27
+ render(vNode, el);
28
+ }
29
+
30
+ // useful hints: https://stackoverflow.com/questions/65163775/how-to-destroy-unmount-vue-js-3-components
31
+ const destroy = () => render(null, el);
32
+ return { vueInstance: vNode, destroy, el };
33
+ };
38
34
 
39
35
  const vueTemplate = (vueConstructor: any) => {
40
- return (h: RevoGrid.HyperFunc<VNode>, p: RevoGrid.ColumnDataSchemaModel) => <span ref={(el) => vueTemplateConstructor(vueConstructor, el as HTMLElement, p)}></span>;
36
+ const current = getCurrentInstance();
37
+ const appContext = current?.appContext;
38
+ return (h: RevoGrid.HyperFunc<VNode>, p: RevoGrid.ColumnDataSchemaModel) => <span ref={(el) => vueTemplateConstructor(vueConstructor, el as HTMLElement, p, appContext)}></span>;
41
39
  };
42
40
 
43
41
  export default vueTemplate;
package/tsconfig.json CHANGED
@@ -3,7 +3,6 @@
3
3
  "outDir": "./dist/",
4
4
  "baseUrl": "./",
5
5
  "allowSyntheticDefaultImports": true,
6
- "declaration": true,
7
6
  "experimentalDecorators": true,
8
7
  "lib": ["dom", "es2017"],
9
8
  "moduleResolution": "node",