@atlassian/clientside-extensions 2.4.0-e0cce94-kuewz5ow
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/LICENSE.txt +30 -0
- package/README.md +7 -0
- package/dist/cjs/AbstractExtension.js +22 -0
- package/dist/cjs/AbstractExtension.js.map +1 -0
- package/dist/cjs/AsyncPanelExtension.js +19 -0
- package/dist/cjs/AsyncPanelExtension.js.map +1 -0
- package/dist/cjs/AsyncPanelExtension.test.js +121 -0
- package/dist/cjs/AsyncPanelExtension.test.js.map +1 -0
- package/dist/cjs/ButtonExtension.js +13 -0
- package/dist/cjs/ButtonExtension.js.map +1 -0
- package/dist/cjs/ButtonExtension.test.js +49 -0
- package/dist/cjs/ButtonExtension.test.js.map +1 -0
- package/dist/cjs/LinkExtension.js +14 -0
- package/dist/cjs/LinkExtension.js.map +1 -0
- package/dist/cjs/LinkExtension.test.js +49 -0
- package/dist/cjs/LinkExtension.test.js.map +1 -0
- package/dist/cjs/ModalExtension.js +121 -0
- package/dist/cjs/ModalExtension.js.map +1 -0
- package/dist/cjs/ModalExtension.test.js +121 -0
- package/dist/cjs/ModalExtension.test.js.map +1 -0
- package/dist/cjs/PageExtension.js +13 -0
- package/dist/cjs/PageExtension.js.map +1 -0
- package/dist/cjs/PageExtension.test.js +34 -0
- package/dist/cjs/PageExtension.test.js.map +1 -0
- package/dist/cjs/PanelExtension.js +36 -0
- package/dist/cjs/PanelExtension.js.map +1 -0
- package/dist/cjs/PanelExtension.test.js +112 -0
- package/dist/cjs/PanelExtension.test.js.map +1 -0
- package/dist/cjs/SectionExtension.js +13 -0
- package/dist/cjs/SectionExtension.js.map +1 -0
- package/dist/cjs/SectionExtension.test.js +46 -0
- package/dist/cjs/SectionExtension.test.js.map +1 -0
- package/dist/cjs/extension-type.js +15 -0
- package/dist/cjs/extension-type.js.map +1 -0
- package/dist/cjs/index.js +21 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/esm/AbstractExtension.js +18 -0
- package/dist/esm/AbstractExtension.js.map +1 -0
- package/dist/esm/AsyncPanelExtension.js +16 -0
- package/dist/esm/AsyncPanelExtension.js.map +1 -0
- package/dist/esm/AsyncPanelExtension.test.js +118 -0
- package/dist/esm/AsyncPanelExtension.test.js.map +1 -0
- package/dist/esm/ButtonExtension.js +10 -0
- package/dist/esm/ButtonExtension.js.map +1 -0
- package/dist/esm/ButtonExtension.test.js +46 -0
- package/dist/esm/ButtonExtension.test.js.map +1 -0
- package/dist/esm/LinkExtension.js +11 -0
- package/dist/esm/LinkExtension.js.map +1 -0
- package/dist/esm/LinkExtension.test.js +46 -0
- package/dist/esm/LinkExtension.test.js.map +1 -0
- package/dist/esm/ModalExtension.js +117 -0
- package/dist/esm/ModalExtension.js.map +1 -0
- package/dist/esm/ModalExtension.test.js +118 -0
- package/dist/esm/ModalExtension.test.js.map +1 -0
- package/dist/esm/PageExtension.js +10 -0
- package/dist/esm/PageExtension.js.map +1 -0
- package/dist/esm/PageExtension.test.js +31 -0
- package/dist/esm/PageExtension.test.js.map +1 -0
- package/dist/esm/PanelExtension.js +32 -0
- package/dist/esm/PanelExtension.js.map +1 -0
- package/dist/esm/PanelExtension.test.js +109 -0
- package/dist/esm/PanelExtension.test.js.map +1 -0
- package/dist/esm/SectionExtension.js +10 -0
- package/dist/esm/SectionExtension.js.map +1 -0
- package/dist/esm/SectionExtension.test.js +43 -0
- package/dist/esm/SectionExtension.test.js.map +1 -0
- package/dist/esm/extension-type.js +12 -0
- package/dist/esm/extension-type.js.map +1 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/types/AbstractExtension.d.ts +11 -0
- package/dist/types/AbstractExtension.d.ts.map +1 -0
- package/dist/types/AsyncPanelExtension.d.ts +18 -0
- package/dist/types/AsyncPanelExtension.d.ts.map +1 -0
- package/dist/types/AsyncPanelExtension.test.d.ts +2 -0
- package/dist/types/AsyncPanelExtension.test.d.ts.map +1 -0
- package/dist/types/ButtonExtension.d.ts +10 -0
- package/dist/types/ButtonExtension.d.ts.map +1 -0
- package/dist/types/ButtonExtension.test.d.ts +2 -0
- package/dist/types/ButtonExtension.test.d.ts.map +1 -0
- package/dist/types/LinkExtension.d.ts +11 -0
- package/dist/types/LinkExtension.d.ts.map +1 -0
- package/dist/types/LinkExtension.test.d.ts +2 -0
- package/dist/types/LinkExtension.test.d.ts.map +1 -0
- package/dist/types/ModalExtension.d.ts +60 -0
- package/dist/types/ModalExtension.d.ts.map +1 -0
- package/dist/types/ModalExtension.test.d.ts +2 -0
- package/dist/types/ModalExtension.test.d.ts.map +1 -0
- package/dist/types/PageExtension.d.ts +11 -0
- package/dist/types/PageExtension.d.ts.map +1 -0
- package/dist/types/PageExtension.test.d.ts +5 -0
- package/dist/types/PageExtension.test.d.ts.map +1 -0
- package/dist/types/PanelExtension.d.ts +19 -0
- package/dist/types/PanelExtension.d.ts.map +1 -0
- package/dist/types/PanelExtension.test.d.ts +2 -0
- package/dist/types/PanelExtension.test.d.ts.map +1 -0
- package/dist/types/SectionExtension.d.ts +8 -0
- package/dist/types/SectionExtension.d.ts.map +1 -0
- package/dist/types/SectionExtension.test.d.ts +2 -0
- package/dist/types/SectionExtension.test.d.ts.map +1 -0
- package/dist/types/extension-type.d.ts +10 -0
- package/dist/types/extension-type.d.ts.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -0
- package/lib/AbstractExtension.ts +31 -0
- package/lib/AsyncPanelExtension.test.ts +145 -0
- package/lib/AsyncPanelExtension.ts +34 -0
- package/lib/ButtonExtension.test.ts +61 -0
- package/lib/ButtonExtension.ts +20 -0
- package/lib/LinkExtension.test.ts +61 -0
- package/lib/LinkExtension.ts +22 -0
- package/lib/ModalExtension.test.ts +147 -0
- package/lib/ModalExtension.ts +188 -0
- package/lib/PageExtension.test.ts +38 -0
- package/lib/PageExtension.ts +21 -0
- package/lib/PanelExtension.test.ts +134 -0
- package/lib/PanelExtension.ts +51 -0
- package/lib/SectionExtension.test.ts +57 -0
- package/lib/SectionExtension.ts +18 -0
- package/lib/extension-type.ts +10 -0
- package/lib/index.ts +21 -0
- package/package.json +79 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { onDebug } from '@atlassian/clientside-extensions-debug';
|
|
2
|
+
import { ExtensionType } from './extension-type';
|
|
3
|
+
import { safeguard } from './AbstractExtension';
|
|
4
|
+
export const factory = (provider) => {
|
|
5
|
+
return (...args) => {
|
|
6
|
+
const attributes = provider(...args);
|
|
7
|
+
return {
|
|
8
|
+
...attributes,
|
|
9
|
+
type: ExtensionType.modal,
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
const noop = () => { };
|
|
14
|
+
export var Appearance;
|
|
15
|
+
(function (Appearance) {
|
|
16
|
+
Appearance["danger"] = "danger";
|
|
17
|
+
Appearance["warning"] = "warning";
|
|
18
|
+
})(Appearance || (Appearance = {}));
|
|
19
|
+
export var Width;
|
|
20
|
+
(function (Width) {
|
|
21
|
+
Width["small"] = "small";
|
|
22
|
+
Width["medium"] = "medium";
|
|
23
|
+
Width["large"] = "large";
|
|
24
|
+
Width["x-large"] = "x-large";
|
|
25
|
+
})(Width || (Width = {}));
|
|
26
|
+
export class Api {
|
|
27
|
+
constructor(closeModalFn, setActions) {
|
|
28
|
+
this.title = '';
|
|
29
|
+
this.renderCallback = noop;
|
|
30
|
+
this.cleanupCallback = noop;
|
|
31
|
+
this.closeModalFn = noop;
|
|
32
|
+
this.onCloseCallback = () => true;
|
|
33
|
+
this.setTitle = (title) => {
|
|
34
|
+
this.title = title;
|
|
35
|
+
return this;
|
|
36
|
+
};
|
|
37
|
+
this.setWidth = (width) => {
|
|
38
|
+
// Runtime checking for 'non-ts' usage
|
|
39
|
+
if (!(width in Width)) {
|
|
40
|
+
onDebug(({ error }) => ({
|
|
41
|
+
level: error,
|
|
42
|
+
message: `Invalid value specified as "width" of modal. Please make sure to use one of the supported values.`,
|
|
43
|
+
meta: {
|
|
44
|
+
value: width,
|
|
45
|
+
supported: Object.keys(Width).concat(),
|
|
46
|
+
},
|
|
47
|
+
}));
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
this.width = width;
|
|
51
|
+
return this;
|
|
52
|
+
};
|
|
53
|
+
this.setAppearance = (appearance) => {
|
|
54
|
+
// Runtime checking for 'non-ts' usage
|
|
55
|
+
if (!(appearance in Appearance)) {
|
|
56
|
+
onDebug(({ error }) => ({
|
|
57
|
+
level: error,
|
|
58
|
+
message: `Invalid value specified as "appearance" of modal. Please make sure to use one of the supported values.`,
|
|
59
|
+
meta: {
|
|
60
|
+
value: appearance,
|
|
61
|
+
supported: Object.keys(Appearance).concat(),
|
|
62
|
+
},
|
|
63
|
+
}));
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
this.appearance = appearance;
|
|
67
|
+
return this;
|
|
68
|
+
};
|
|
69
|
+
this.onMount = (callback) => {
|
|
70
|
+
this.renderCallback = safeguard('onMount', callback);
|
|
71
|
+
return this;
|
|
72
|
+
};
|
|
73
|
+
this.onUnmount = (callback) => {
|
|
74
|
+
this.cleanupCallback = safeguard('onUnmount', callback);
|
|
75
|
+
return this;
|
|
76
|
+
};
|
|
77
|
+
this.closeModal = () => {
|
|
78
|
+
this.closeModalFn();
|
|
79
|
+
};
|
|
80
|
+
this.closeModalFn = safeguard('onClose', closeModalFn);
|
|
81
|
+
this.setActions = (actions) => {
|
|
82
|
+
setActions(Api.filterActionProps(actions));
|
|
83
|
+
return this;
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
getTitle() {
|
|
87
|
+
return this.title;
|
|
88
|
+
}
|
|
89
|
+
getWidth() {
|
|
90
|
+
return this.width;
|
|
91
|
+
}
|
|
92
|
+
getAppearance() {
|
|
93
|
+
return this.appearance;
|
|
94
|
+
}
|
|
95
|
+
getRenderCallback() {
|
|
96
|
+
return this.renderCallback;
|
|
97
|
+
}
|
|
98
|
+
getCleanupCallback() {
|
|
99
|
+
return this.cleanupCallback;
|
|
100
|
+
}
|
|
101
|
+
onClose(callback) {
|
|
102
|
+
this.onCloseCallback = safeguard('onClose', callback);
|
|
103
|
+
return this;
|
|
104
|
+
}
|
|
105
|
+
getOnCloseCallback() {
|
|
106
|
+
return this.onCloseCallback;
|
|
107
|
+
}
|
|
108
|
+
static filterActionProps(actions) {
|
|
109
|
+
if (!Array.isArray(actions)) {
|
|
110
|
+
return [];
|
|
111
|
+
}
|
|
112
|
+
return actions.map(({ text, onClick, isDisabled, isLoading, testId }) => {
|
|
113
|
+
return { text, onClick, isDisabled, isLoading, testId };
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=ModalExtension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModalExtension.js","sourceRoot":"","sources":["../../lib/ModalExtension.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { onDebug } from '@atlassian/clientside-extensions-debug';
|
|
2
|
+
import * as ModalExtension from './ModalExtension';
|
|
3
|
+
jest.mock('@atlassian/clientside-extensions-debug');
|
|
4
|
+
describe('ModalExtension', () => {
|
|
5
|
+
// @ts-expect-error - invalid values for type. Factory should overwrite it.
|
|
6
|
+
const testAttributesProvider = (api, context) => {
|
|
7
|
+
api.onCleanup(jest.fn());
|
|
8
|
+
api.updateAttributes({});
|
|
9
|
+
return {
|
|
10
|
+
type: 'not-valid',
|
|
11
|
+
label: context.value === 42 ? 'The meaning of life' : 'A label',
|
|
12
|
+
onAction: jest.fn(),
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
const testAPI = {
|
|
16
|
+
onCleanup: jest.fn(),
|
|
17
|
+
updateAttributes: jest.fn(),
|
|
18
|
+
};
|
|
19
|
+
it('should generate the extension descriptor with the correct type', () => {
|
|
20
|
+
const extensionProvider = ModalExtension.factory(testAttributesProvider);
|
|
21
|
+
const extension = extensionProvider(testAPI, {});
|
|
22
|
+
// expect all attributes to be merged, and type to be overwritten with the correct value.
|
|
23
|
+
expect(extension).toEqual({
|
|
24
|
+
type: 'modal',
|
|
25
|
+
label: 'A label',
|
|
26
|
+
onAction: expect.any(Function),
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
it('should provide a extensionAPI object to the extension provider', () => {
|
|
30
|
+
expect(testAPI.onCleanup).toHaveBeenCalledTimes(0);
|
|
31
|
+
expect(testAPI.updateAttributes).toHaveBeenCalledTimes(0);
|
|
32
|
+
const extensionProvider = ModalExtension.factory(testAttributesProvider);
|
|
33
|
+
extensionProvider(testAPI, {});
|
|
34
|
+
expect(testAPI.onCleanup).toHaveBeenCalledTimes(1);
|
|
35
|
+
expect(testAPI.updateAttributes).toHaveBeenCalledTimes(1);
|
|
36
|
+
});
|
|
37
|
+
it('should share any provided context with the attributes provider', () => {
|
|
38
|
+
const extensionProvider = ModalExtension.factory(testAttributesProvider);
|
|
39
|
+
const extension = extensionProvider(testAPI, { value: 42 });
|
|
40
|
+
// expect label to change because of context
|
|
41
|
+
expect(extension).toEqual({
|
|
42
|
+
type: 'modal',
|
|
43
|
+
label: 'The meaning of life',
|
|
44
|
+
onAction: expect.any(Function),
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
it('should export all the supported appreanace for modals', () => {
|
|
48
|
+
expect(ModalExtension.Appearance).toBeTruthy();
|
|
49
|
+
});
|
|
50
|
+
it('should export all the supported sizes for modals', () => {
|
|
51
|
+
expect(ModalExtension.Width).toBeTruthy();
|
|
52
|
+
});
|
|
53
|
+
describe('API', () => {
|
|
54
|
+
let closeFn;
|
|
55
|
+
let api;
|
|
56
|
+
const el = document.createElement('div');
|
|
57
|
+
const setStateFn = () => { };
|
|
58
|
+
beforeEach(() => {
|
|
59
|
+
closeFn = jest.fn();
|
|
60
|
+
api = new ModalExtension.Api(closeFn, setStateFn);
|
|
61
|
+
});
|
|
62
|
+
it('#onMount callback used in getRenderCallback', () => {
|
|
63
|
+
const cb = jest.fn();
|
|
64
|
+
api.onMount(cb);
|
|
65
|
+
api.getRenderCallback()(el);
|
|
66
|
+
expect(cb).toHaveBeenCalledTimes(1);
|
|
67
|
+
});
|
|
68
|
+
it('#onMount does nothing if not set', () => {
|
|
69
|
+
expect(() => {
|
|
70
|
+
api.getRenderCallback()(el);
|
|
71
|
+
}).not.toThrow();
|
|
72
|
+
});
|
|
73
|
+
it('#onMount does nothing if callback is not function', () => {
|
|
74
|
+
// @ts-expect-error checking that non-TS consumers don't shoot themselves (or others) in the foot
|
|
75
|
+
api.onMount(null);
|
|
76
|
+
expect(() => {
|
|
77
|
+
api.getRenderCallback()(el);
|
|
78
|
+
}).not.toThrow();
|
|
79
|
+
});
|
|
80
|
+
it('#onMount fails gracefully if callback throws error', () => {
|
|
81
|
+
api.onMount(() => {
|
|
82
|
+
throw Error('whoops');
|
|
83
|
+
});
|
|
84
|
+
expect(() => {
|
|
85
|
+
api.getRenderCallback()(el);
|
|
86
|
+
}).not.toThrow();
|
|
87
|
+
});
|
|
88
|
+
it('#onUnmount callback used in getCleanupCallback', () => {
|
|
89
|
+
const cb = jest.fn();
|
|
90
|
+
api.onUnmount(cb);
|
|
91
|
+
api.getCleanupCallback()(el);
|
|
92
|
+
expect(cb).toHaveBeenCalledTimes(1);
|
|
93
|
+
});
|
|
94
|
+
it('#onUnmount does nothing if not set', () => {
|
|
95
|
+
expect(() => {
|
|
96
|
+
api.getCleanupCallback()(el);
|
|
97
|
+
}).not.toThrow();
|
|
98
|
+
});
|
|
99
|
+
it('#onUnmount does nothing if callback is not function', () => {
|
|
100
|
+
// @ts-expect-error checking that non-TS consumers don't shoot themselves (or others) in the foot
|
|
101
|
+
api.onUnmount(null);
|
|
102
|
+
expect(() => {
|
|
103
|
+
api.getCleanupCallback()(el);
|
|
104
|
+
}).not.toThrow();
|
|
105
|
+
expect(onDebug).toHaveBeenCalledTimes(1);
|
|
106
|
+
});
|
|
107
|
+
it('#onUnmount fails gracefully if callback throws error', () => {
|
|
108
|
+
api.onUnmount(() => {
|
|
109
|
+
throw Error('whoops');
|
|
110
|
+
});
|
|
111
|
+
expect(() => {
|
|
112
|
+
api.getCleanupCallback()(el);
|
|
113
|
+
}).not.toThrow();
|
|
114
|
+
expect(onDebug).toHaveBeenCalledTimes(1);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=ModalExtension.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModalExtension.test.js","sourceRoot":"","sources":["../../lib/ModalExtension.test.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AACjE,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AAEnD,IAAI,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;AAMpD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC5B,2EAA2E;IAC3E,MAAM,sBAAsB,GAA2C,CAAC,GAAG,EAAE,OAAoB,EAAE,EAAE;QACjG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACzB,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAEzB,OAAO;YACH,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;YAC/D,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE;SACtB,CAAC;IACN,CAAC,CAAC;IAEF,MAAM,OAAO,GAAgD;QACzD,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE;QACpB,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE;KAC9B,CAAC;IAEF,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACtE,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QACzE,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAEjD,yFAAyF;QACzF,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;YACtB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;SACjC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACtE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAE1D,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QACzE,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAE/B,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACtE,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QACzE,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAE5D,4CAA4C;QAC5C,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;YACtB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,qBAAqB;YAC5B,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;SACjC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;QACjB,IAAI,OAAO,CAAC;QACZ,IAAI,GAAuB,CAAC;QAC5B,MAAM,EAAE,GAAgB,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,UAAU,GAA2D,GAAG,EAAE,GAAE,CAAC,CAAC;QAEpF,UAAU,CAAC,GAAG,EAAE;YACZ,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YACpB,GAAG,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACnD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YACrB,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAChB,GAAG,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;YAC5B,MAAM,CAAC,EAAE,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YACxC,MAAM,CAAC,GAAG,EAAE;gBACR,GAAG,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YACzD,iGAAiG;YACjG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,MAAM,CAAC,GAAG,EAAE;gBACR,GAAG,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC1D,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE;gBACb,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,GAAG,EAAE;gBACR,GAAG,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACtD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YACrB,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAClB,GAAG,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC1C,MAAM,CAAC,GAAG,EAAE;gBACR,GAAG,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC3D,iGAAiG;YACjG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACpB,MAAM,CAAC,GAAG,EAAE;gBACR,GAAG,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC5D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;gBACf,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,GAAG,EAAE;gBACR,GAAG,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ExtensionType } from './extension-type';
|
|
2
|
+
export const factory = (renderCallback) => {
|
|
3
|
+
return () => ({
|
|
4
|
+
type: ExtensionType.page,
|
|
5
|
+
onAction: (node, data) => {
|
|
6
|
+
renderCallback(node, data);
|
|
7
|
+
},
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=PageExtension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageExtension.js","sourceRoot":"","sources":["../../lib/PageExtension.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAWjD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAgB,cAA6C,EAAyC,EAAE;IAC3H,OAAO,GAAG,EAAE,CAAC,CAAC;QACV,IAAI,EAAE,aAAa,CAAC,IAAI;QACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;YACrB,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;KACJ,CAAC,CAAC;AACP,CAAC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @jest-environment jsdom
|
|
3
|
+
*/
|
|
4
|
+
import * as PageExtension from './PageExtension';
|
|
5
|
+
describe('PageExtension', () => {
|
|
6
|
+
it('should generate the extension shape', () => {
|
|
7
|
+
// given
|
|
8
|
+
const fakeRenderCallback = jest.fn();
|
|
9
|
+
// when
|
|
10
|
+
const extensionProvider = PageExtension.factory(fakeRenderCallback);
|
|
11
|
+
const extension = extensionProvider();
|
|
12
|
+
// then
|
|
13
|
+
expect(extension).toEqual({
|
|
14
|
+
type: 'page',
|
|
15
|
+
onAction: expect.any(Function),
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
it('should call the render callback', () => {
|
|
19
|
+
// given
|
|
20
|
+
const fakeRenderCallback = jest.fn();
|
|
21
|
+
const extensionProvider = PageExtension.factory(fakeRenderCallback);
|
|
22
|
+
const extension = extensionProvider();
|
|
23
|
+
const fakeNode = document.createElement('div');
|
|
24
|
+
const fakeDataProvider = { foo: 'bar' };
|
|
25
|
+
// when
|
|
26
|
+
extension.onAction(fakeNode, fakeDataProvider);
|
|
27
|
+
// then
|
|
28
|
+
expect(fakeRenderCallback).toHaveBeenCalledWith(fakeNode, fakeDataProvider);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=PageExtension.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageExtension.test.js","sourceRoot":"","sources":["../../lib/PageExtension.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AAEjD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC3C,QAAQ;QACR,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAErC,OAAO;QACP,MAAM,iBAAiB,GAAG,aAAa,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACpE,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;QAEtC,OAAO;QACP,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;YACtB,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;SACjC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACvC,QAAQ;QACR,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,iBAAiB,GAAG,aAAa,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACpE,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;QAEtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAExC,OAAO;QACP,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QAE/C,OAAO;QACP,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ExtensionType } from './extension-type';
|
|
2
|
+
import { safeguard } from './AbstractExtension';
|
|
3
|
+
export const factory = (provider) => {
|
|
4
|
+
return (...args) => {
|
|
5
|
+
return {
|
|
6
|
+
...provider(...args),
|
|
7
|
+
type: ExtensionType.panel,
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
const noop = () => { };
|
|
12
|
+
export class Api {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.renderCallback = noop;
|
|
15
|
+
this.cleanupCallback = noop;
|
|
16
|
+
}
|
|
17
|
+
onMount(callback) {
|
|
18
|
+
this.renderCallback = safeguard('onMount', callback);
|
|
19
|
+
return this;
|
|
20
|
+
}
|
|
21
|
+
onUnmount(callback) {
|
|
22
|
+
this.cleanupCallback = safeguard('onUnmount', callback);
|
|
23
|
+
return this;
|
|
24
|
+
}
|
|
25
|
+
getRenderCallback() {
|
|
26
|
+
return this.renderCallback;
|
|
27
|
+
}
|
|
28
|
+
getCleanupCallback() {
|
|
29
|
+
return this.cleanupCallback;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=PanelExtension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PanelExtension.js","sourceRoot":"","sources":["../../lib/PanelExtension.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAWhD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAW,QAA2C,EAAqC,EAAE;IAChH,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE;QACf,OAAO;YACH,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;YACpB,IAAI,EAAE,aAAa,CAAC,KAAK;SAC5B,CAAC;IACN,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AAEtB,MAAM,OAAO,GAAG;IAAhB;QACY,mBAAc,GAAsB,IAAI,CAAC;QAEzC,oBAAe,GAAsB,IAAI,CAAC;IAqBtD,CAAC;IAnBU,OAAO,CAAC,QAA2B;QACtC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAErD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,SAAS,CAAC,QAA2B;QACxC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAExD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,iBAAiB;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAEM,kBAAkB;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;CACJ"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { onDebug } from '@atlassian/clientside-extensions-debug';
|
|
2
|
+
import * as PanelExtension from './PanelExtension';
|
|
3
|
+
jest.mock('@atlassian/clientside-extensions-debug');
|
|
4
|
+
describe('PanelExtension', () => {
|
|
5
|
+
// @ts-expect-error - invalid values for type. Factory should overwrite it.
|
|
6
|
+
const testAttributesProvider = (api, context) => {
|
|
7
|
+
api.onCleanup(jest.fn());
|
|
8
|
+
api.updateAttributes({});
|
|
9
|
+
return {
|
|
10
|
+
type: 'not-valid',
|
|
11
|
+
label: context.value === 42 ? 'The meaning of life' : 'A label',
|
|
12
|
+
onAction: jest.fn(),
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
const testAPI = {
|
|
16
|
+
onCleanup: jest.fn(),
|
|
17
|
+
updateAttributes: jest.fn(),
|
|
18
|
+
};
|
|
19
|
+
it('should generate the extension descriptor with the correct type', () => {
|
|
20
|
+
const extensionProvider = PanelExtension.factory(testAttributesProvider);
|
|
21
|
+
const extension = extensionProvider(testAPI, {});
|
|
22
|
+
// expect all attributes to be merged, and type to be overwritten with the correct value.
|
|
23
|
+
expect(extension).toEqual({
|
|
24
|
+
type: 'panel',
|
|
25
|
+
label: 'A label',
|
|
26
|
+
onAction: expect.any(Function),
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
it('should provide a extensionAPI object to the extension provider', () => {
|
|
30
|
+
expect(testAPI.onCleanup).toHaveBeenCalledTimes(0);
|
|
31
|
+
expect(testAPI.updateAttributes).toHaveBeenCalledTimes(0);
|
|
32
|
+
const extensionProvider = PanelExtension.factory(testAttributesProvider);
|
|
33
|
+
extensionProvider(testAPI, {});
|
|
34
|
+
expect(testAPI.onCleanup).toHaveBeenCalledTimes(1);
|
|
35
|
+
expect(testAPI.updateAttributes).toHaveBeenCalledTimes(1);
|
|
36
|
+
});
|
|
37
|
+
it('should share any provided context with the attributes provider', () => {
|
|
38
|
+
const extensionProvider = PanelExtension.factory(testAttributesProvider);
|
|
39
|
+
const extension = extensionProvider(testAPI, { value: 42 });
|
|
40
|
+
// expect label to change because of context
|
|
41
|
+
expect(extension).toEqual({
|
|
42
|
+
type: 'panel',
|
|
43
|
+
label: 'The meaning of life',
|
|
44
|
+
onAction: expect.any(Function),
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
describe('API', () => {
|
|
48
|
+
let api;
|
|
49
|
+
const el = document.createElement('div');
|
|
50
|
+
beforeEach(() => {
|
|
51
|
+
api = new PanelExtension.Api();
|
|
52
|
+
});
|
|
53
|
+
it('#onMount callback used in getRenderCallback', () => {
|
|
54
|
+
const cb = jest.fn();
|
|
55
|
+
api.onMount(cb);
|
|
56
|
+
api.getRenderCallback()(el);
|
|
57
|
+
expect(cb).toHaveBeenCalledTimes(1);
|
|
58
|
+
});
|
|
59
|
+
it('#onMount does nothing if not set', () => {
|
|
60
|
+
expect(() => {
|
|
61
|
+
api.getRenderCallback()(el);
|
|
62
|
+
}).not.toThrow();
|
|
63
|
+
});
|
|
64
|
+
it('#onMount does nothing if callback is not function', () => {
|
|
65
|
+
// @ts-expect-error checking that non-TS consumers don't shoot themselves (or others) in the foot
|
|
66
|
+
api.onMount(null);
|
|
67
|
+
expect(() => {
|
|
68
|
+
api.getRenderCallback()(el);
|
|
69
|
+
}).not.toThrow();
|
|
70
|
+
});
|
|
71
|
+
it('#onMount fails gracefully if callback throws error', () => {
|
|
72
|
+
api.onMount(() => {
|
|
73
|
+
throw Error('whoops');
|
|
74
|
+
});
|
|
75
|
+
expect(() => {
|
|
76
|
+
api.getRenderCallback()(el);
|
|
77
|
+
}).not.toThrow();
|
|
78
|
+
});
|
|
79
|
+
it('#onUnmount callback used in getCleanupCallback', () => {
|
|
80
|
+
const cb = jest.fn();
|
|
81
|
+
api.onUnmount(cb);
|
|
82
|
+
api.getCleanupCallback()(el);
|
|
83
|
+
expect(cb).toHaveBeenCalledTimes(1);
|
|
84
|
+
});
|
|
85
|
+
it('#onUnmount does nothing if not set', () => {
|
|
86
|
+
expect(() => {
|
|
87
|
+
api.getCleanupCallback()(el);
|
|
88
|
+
}).not.toThrow();
|
|
89
|
+
});
|
|
90
|
+
it('#onUnmount does nothing if callback is not function', () => {
|
|
91
|
+
// @ts-expect-error checking that non-TS consumers don't shoot themselves (or others) in the foot
|
|
92
|
+
api.onUnmount(null);
|
|
93
|
+
expect(() => {
|
|
94
|
+
api.getCleanupCallback()(el);
|
|
95
|
+
}).not.toThrow();
|
|
96
|
+
expect(onDebug).toHaveBeenCalledTimes(1);
|
|
97
|
+
});
|
|
98
|
+
it('#onUnmount fails gracefully if callback throws error', () => {
|
|
99
|
+
api.onUnmount(() => {
|
|
100
|
+
throw Error('whoops');
|
|
101
|
+
});
|
|
102
|
+
expect(() => {
|
|
103
|
+
api.getCleanupCallback()(el);
|
|
104
|
+
}).not.toThrow();
|
|
105
|
+
expect(onDebug).toHaveBeenCalledTimes(1);
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=PanelExtension.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PanelExtension.test.js","sourceRoot":"","sources":["../../lib/PanelExtension.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SectionExtension.js","sourceRoot":"","sources":["../../lib/SectionExtension.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAQjD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAW,QAA6C,EAAuC,EAAE;IACpH,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE;QACf,OAAO;YACH,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;YACpB,IAAI,EAAE,aAAa,CAAC,OAAO;SAC9B,CAAC;IACN,CAAC,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import * as SectionExtension from './SectionExtension';
|
|
2
|
+
describe('SectionExtension', () => {
|
|
3
|
+
// @ts-expect-error we set the invalid type
|
|
4
|
+
const testAttributesProvider = (api, context) => {
|
|
5
|
+
api.onCleanup(jest.fn());
|
|
6
|
+
api.updateAttributes({});
|
|
7
|
+
return {
|
|
8
|
+
type: 'not-valid',
|
|
9
|
+
label: context.value === 42 ? 'The meaning of life' : 'A label',
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
const testAPI = {
|
|
13
|
+
onCleanup: jest.fn(),
|
|
14
|
+
updateAttributes: jest.fn(),
|
|
15
|
+
};
|
|
16
|
+
it('should generate the extension descriptor with the correct type', () => {
|
|
17
|
+
const extensionProvider = SectionExtension.factory(testAttributesProvider);
|
|
18
|
+
const extension = extensionProvider(testAPI, {});
|
|
19
|
+
// expect all attributes to be merged, and type to be overwritten with the correct value.
|
|
20
|
+
expect(extension).toEqual({
|
|
21
|
+
type: 'section',
|
|
22
|
+
label: 'A label',
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
it('should provide a extensionAPI object to the extension provider', () => {
|
|
26
|
+
expect(testAPI.onCleanup).toHaveBeenCalledTimes(0);
|
|
27
|
+
expect(testAPI.updateAttributes).toHaveBeenCalledTimes(0);
|
|
28
|
+
const extensionProvider = SectionExtension.factory(testAttributesProvider);
|
|
29
|
+
extensionProvider(testAPI, {});
|
|
30
|
+
expect(testAPI.onCleanup).toHaveBeenCalledTimes(1);
|
|
31
|
+
expect(testAPI.updateAttributes).toHaveBeenCalledTimes(1);
|
|
32
|
+
});
|
|
33
|
+
it('should share any provided context with the attributes provider', () => {
|
|
34
|
+
const extensionProvider = SectionExtension.factory(testAttributesProvider);
|
|
35
|
+
const extension = extensionProvider(testAPI, { value: 42 });
|
|
36
|
+
// expect label to change because of context
|
|
37
|
+
expect(extension).toEqual({
|
|
38
|
+
type: 'section',
|
|
39
|
+
label: 'The meaning of life',
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=SectionExtension.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SectionExtension.test.js","sourceRoot":"","sources":["../../lib/SectionExtension.test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,gBAAgB,MAAM,oBAAoB,CAAC;AAOvD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC9B,2CAA2C;IAC3C,MAAM,sBAAsB,GAA8B,CAAC,GAAG,EAAE,OAAoB,EAAE,EAAE;QACpF,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACzB,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAEzB,OAAO;YACH,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;SAClE,CAAC;IACN,CAAC,CAAC;IACF,MAAM,OAAO,GAAgD;QACzD,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE;QACpB,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE;KAC9B,CAAC;IAEF,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACtE,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAC3E,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAEjD,yFAAyF;QACzF,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;YACtB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,SAAS;SACnB,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACtE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAE1D,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAC3E,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAE/B,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACtE,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAC3E,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAE5D,4CAA4C;QAC5C,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;YACtB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,qBAAqB;SAC/B,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// eslint-disable-next-line import/prefer-default-export
|
|
2
|
+
export var ExtensionType;
|
|
3
|
+
(function (ExtensionType) {
|
|
4
|
+
ExtensionType["asyncPanel"] = "async-panel";
|
|
5
|
+
ExtensionType["button"] = "button";
|
|
6
|
+
ExtensionType["link"] = "link";
|
|
7
|
+
ExtensionType["modal"] = "modal";
|
|
8
|
+
ExtensionType["panel"] = "panel";
|
|
9
|
+
ExtensionType["page"] = "page";
|
|
10
|
+
ExtensionType["section"] = "section";
|
|
11
|
+
})(ExtensionType || (ExtensionType = {}));
|
|
12
|
+
//# sourceMappingURL=extension-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-type.js","sourceRoot":"","sources":["../../lib/extension-type.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,MAAM,CAAN,IAAY,aAQX;AARD,WAAY,aAAa;IACrB,2CAA4B,CAAA;IAC5B,kCAAiB,CAAA;IACjB,8BAAa,CAAA;IACb,gCAAe,CAAA;IACf,gCAAe,CAAA;IACf,8BAAa,CAAA;IACb,oCAAmB,CAAA;AACvB,CAAC,EARW,aAAa,KAAb,aAAa,QAQxB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as AsyncPanelExtension from './AsyncPanelExtension';
|
|
2
|
+
import * as ButtonExtension from './ButtonExtension';
|
|
3
|
+
import * as LinkExtension from './LinkExtension';
|
|
4
|
+
import * as ModalExtension from './ModalExtension';
|
|
5
|
+
import * as PanelExtension from './PanelExtension';
|
|
6
|
+
import * as SectionExtension from './SectionExtension';
|
|
7
|
+
import * as PageExtension from './PageExtension';
|
|
8
|
+
import { ExtensionType } from './extension-type';
|
|
9
|
+
export { AsyncPanelExtension, ButtonExtension, LinkExtension, ModalExtension, PanelExtension, SectionExtension, PageExtension, ExtensionType, };
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,mBAAmB,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,eAAe,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,gBAAgB,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD,OAAO,EACH,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,aAAa,GAChB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
declare type Callable = (...args: any[]) => any;
|
|
2
|
+
export interface LifecycleCallback {
|
|
3
|
+
(element: HTMLElement): void;
|
|
4
|
+
}
|
|
5
|
+
export interface MountableExtension {
|
|
6
|
+
onMount(mountCallback: LifecycleCallback): MountableExtension;
|
|
7
|
+
onUnmount(unmountCallback: LifecycleCallback): MountableExtension;
|
|
8
|
+
}
|
|
9
|
+
export declare function safeguard<T extends Callable>(callbackDebugName: string, callback: T): (...args: Parameters<T>) => ReturnType<T>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=AbstractExtension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractExtension.d.ts","sourceRoot":"","sources":["../../lib/AbstractExtension.ts"],"names":[],"mappings":"AAIA,aAAK,QAAQ,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;AAExC,MAAM,WAAW,iBAAiB;IAC9B,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IAC/B,OAAO,CAAC,aAAa,EAAE,iBAAiB,GAAG,kBAAkB,CAAC;IAE9D,SAAS,CAAC,eAAe,EAAE,iBAAiB,GAAG,kBAAkB,CAAC;CACrE;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAc/H"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ExtensionAttributes, ExtensionAttributesProvider, Context } from '@atlassian/clientside-extensions-registry';
|
|
2
|
+
import type { PanelRenderExtension } from './PanelExtension';
|
|
3
|
+
import { Api } from './PanelExtension';
|
|
4
|
+
import { ExtensionType } from './extension-type';
|
|
5
|
+
export interface AsyncPanelRenderExtension extends PanelRenderExtension {
|
|
6
|
+
}
|
|
7
|
+
export interface AsyncPanelAttributes extends ExtensionAttributes {
|
|
8
|
+
onAction: AsyncPanelRenderExtension;
|
|
9
|
+
type?: ExtensionType.asyncPanel;
|
|
10
|
+
}
|
|
11
|
+
export declare type AsyncPanelAttributesProvider<ContextT> = ExtensionAttributesProvider<AsyncPanelAttributes, ContextT>;
|
|
12
|
+
export interface AsyncPanelAttributesWithContext extends AsyncPanelAttributes {
|
|
13
|
+
contextProvider: () => Context<{}>;
|
|
14
|
+
}
|
|
15
|
+
export declare type AsyncPanelAttributesProviderWithContext<ContextT> = ExtensionAttributesProvider<AsyncPanelAttributesWithContext, ContextT>;
|
|
16
|
+
export declare const factory: <ContextT>(provider: ExtensionAttributesProvider<AsyncPanelAttributes, ContextT>) => ExtensionAttributesProvider<AsyncPanelAttributesWithContext, ContextT>;
|
|
17
|
+
export { Api };
|
|
18
|
+
//# sourceMappingURL=AsyncPanelExtension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AsyncPanelExtension.d.ts","sourceRoot":"","sources":["../../lib/AsyncPanelExtension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,OAAO,EAAE,MAAM,2CAA2C,CAAC;AAC3H,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,WAAW,yBAA0B,SAAQ,oBAAoB;CAAG;AAE1E,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC7D,QAAQ,EAAE,yBAAyB,CAAC;IACpC,IAAI,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC;CACnC;AAED,oBAAY,4BAA4B,CAAC,QAAQ,IAAI,2BAA2B,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;AAEjH,MAAM,WAAW,+BAAgC,SAAQ,oBAAoB;IACzE,eAAe,EAAE,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;CACtC;AAED,oBAAY,uCAAuC,CAAC,QAAQ,IAAI,2BAA2B,CAAC,+BAA+B,EAAE,QAAQ,CAAC,CAAC;AAEvI,eAAO,MAAM,OAAO,6JAWnB,CAAC;AAEF,OAAO,EAAE,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AsyncPanelExtension.test.d.ts","sourceRoot":"","sources":["../../lib/AsyncPanelExtension.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ExtensionAttributes, ExtensionAttributesProvider, OnAction } from '@atlassian/clientside-extensions-registry';
|
|
2
|
+
import { ExtensionType } from './extension-type';
|
|
3
|
+
export interface ButtonAttributes extends ExtensionAttributes {
|
|
4
|
+
onAction?: OnAction;
|
|
5
|
+
label: string;
|
|
6
|
+
type?: ExtensionType.button;
|
|
7
|
+
}
|
|
8
|
+
export declare type ButtonAttributesProvider<ContextT> = ExtensionAttributesProvider<ButtonAttributes, ContextT>;
|
|
9
|
+
export declare const factory: <ContextT>(provider: ExtensionAttributesProvider<ButtonAttributes, ContextT>) => ExtensionAttributesProvider<ButtonAttributes, ContextT>;
|
|
10
|
+
//# sourceMappingURL=ButtonExtension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ButtonExtension.d.ts","sourceRoot":"","sources":["../../lib/ButtonExtension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AAE5H,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB;IACzD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC;CAC/B;AAED,oBAAY,wBAAwB,CAAC,QAAQ,IAAI,2BAA2B,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AAEzG,eAAO,MAAM,OAAO,0IAOnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ButtonExtension.test.d.ts","sourceRoot":"","sources":["../../lib/ButtonExtension.test.ts"],"names":[],"mappings":""}
|