@operato/shell 1.0.14 → 1.0.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.
Files changed (47) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/src/actions/app.d.ts +11 -0
  3. package/dist/src/actions/app.js +12 -0
  4. package/dist/src/actions/app.js.map +1 -0
  5. package/dist/src/actions/const.d.ts +6 -0
  6. package/dist/src/actions/const.js +7 -0
  7. package/dist/src/actions/const.js.map +1 -0
  8. package/dist/src/actions/index.d.ts +3 -0
  9. package/dist/src/actions/index.js +4 -0
  10. package/dist/src/actions/index.js.map +1 -0
  11. package/dist/src/actions/route.d.ts +20 -0
  12. package/dist/src/actions/route.js +77 -0
  13. package/dist/src/actions/route.js.map +1 -0
  14. package/dist/src/app/app-style.d.ts +1 -0
  15. package/dist/src/app/app-style.js +69 -0
  16. package/dist/src/app/app-style.js.map +1 -0
  17. package/dist/src/app/app.d.ts +1 -0
  18. package/dist/src/app/app.js +193 -0
  19. package/dist/src/app/app.js.map +1 -0
  20. package/dist/src/app/pages/page-404.d.ts +8 -0
  21. package/dist/src/app/pages/page-404.js +57 -0
  22. package/dist/src/app/pages/page-404.js.map +1 -0
  23. package/dist/src/app/pages/page-view.d.ts +16 -0
  24. package/dist/src/app/pages/page-view.js +131 -0
  25. package/dist/src/app/pages/page-view.js.map +1 -0
  26. package/dist/src/entries/public/home.d.ts +17 -0
  27. package/dist/src/entries/public/home.js +87 -0
  28. package/dist/src/entries/public/home.js.map +1 -0
  29. package/dist/src/index.d.ts +3 -0
  30. package/dist/src/index.js +0 -1
  31. package/dist/src/index.js.map +1 -0
  32. package/dist/src/module-importer.import +0 -0
  33. package/dist/src/object-store.d.ts +16 -0
  34. package/dist/src/object-store.js +129 -0
  35. package/dist/src/object-store.js.map +1 -0
  36. package/dist/src/reducers/app.d.ts +36 -0
  37. package/dist/src/reducers/app.js +36 -0
  38. package/dist/src/reducers/app.js.map +1 -0
  39. package/dist/src/reducers/route.d.ts +16 -0
  40. package/dist/src/reducers/route.js +57 -0
  41. package/dist/src/reducers/route.js.map +1 -0
  42. package/dist/src/store.d.ts +6 -0
  43. package/dist/src/store.js +15 -0
  44. package/dist/src/store.js.map +1 -0
  45. package/dist/tsconfig.tsbuildinfo +1 -0
  46. package/package.json +4 -3
  47. package/src/index.ts +0 -1
package/CHANGELOG.md CHANGED
@@ -3,6 +3,23 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ### [1.0.16](https://github.com/hatiolab/operato/compare/v1.0.15...v1.0.16) (2022-09-14)
7
+
8
+ **Note:** Version bump only for package @operato/shell
9
+
10
+
11
+
12
+
13
+
14
+ ### [1.0.15](https://github.com/hatiolab/operato/compare/v1.0.14...v1.0.15) (2022-09-12)
15
+
16
+
17
+ ### :mega: Other
18
+
19
+ * remove comment ([7925720](https://github.com/hatiolab/operato/commit/79257204dd549948a70ceaa001525b3c568c9823))
20
+
21
+
22
+
6
23
  ### [1.0.7](https://github.com/hatiolab/operato/compare/v1.0.6...v1.0.7) (2022-07-31)
7
24
 
8
25
 
@@ -0,0 +1,11 @@
1
+ export declare const UPDATE_MODULES = "UPDATE_MODULES";
2
+ export declare const UPDATE_BASE_URL = "UPDATE_BASE_URL";
3
+ export declare const UPDATE_CONTEXT_PATH = "UPDATE_CONTEXT_PATH";
4
+ export declare const SET_DOMAINS = "SET-DOMAINS";
5
+ export declare const updateDomains: (domains: {
6
+ name: string;
7
+ subdomain: string;
8
+ }[], domain: {
9
+ name: string;
10
+ subdomain: string;
11
+ }) => (dispatch: any) => void;
@@ -0,0 +1,12 @@
1
+ export const UPDATE_MODULES = 'UPDATE_MODULES';
2
+ export const UPDATE_BASE_URL = 'UPDATE_BASE_URL';
3
+ export const UPDATE_CONTEXT_PATH = 'UPDATE_CONTEXT_PATH';
4
+ export const SET_DOMAINS = 'SET-DOMAINS';
5
+ export const updateDomains = (domains, domain) => (dispatch) => {
6
+ dispatch({
7
+ type: SET_DOMAINS,
8
+ domains,
9
+ domain
10
+ });
11
+ };
12
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/actions/app.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAA;AAC9C,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAA;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAA;AACxD,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAA;AAExC,MAAM,CAAC,MAAM,aAAa,GACxB,CACE,OAGG,EACH,MAGC,EACD,EAAE,CACJ,CAAC,QAAa,EAAE,EAAE;IAChB,QAAQ,CAAC;QACP,IAAI,EAAE,WAAW;QACjB,OAAO;QACP,MAAM;KACP,CAAC,CAAA;AACJ,CAAC,CAAA","sourcesContent":["export const UPDATE_MODULES = 'UPDATE_MODULES'\nexport const UPDATE_BASE_URL = 'UPDATE_BASE_URL'\nexport const UPDATE_CONTEXT_PATH = 'UPDATE_CONTEXT_PATH'\nexport const SET_DOMAINS = 'SET-DOMAINS'\n\nexport const updateDomains =\n (\n domains: {\n name: string\n subdomain: string\n }[],\n domain: {\n name: string\n subdomain: string\n }\n ) =>\n (dispatch: any) => {\n dispatch({\n type: SET_DOMAINS,\n domains,\n domain\n })\n }\n"]}
@@ -0,0 +1,6 @@
1
+ export declare const UPDATE_PAGE = "UPDATE_PAGE";
2
+ export declare const UPDATE_CONTEXT = "UPDATE_CONTEXT";
3
+ export declare const UPDATE_ACTIVE_PAGE = "UPDATE_ACTIVE_PAGE";
4
+ export declare const REGISTER_NAVIGATION_CALLBACK = "REGISTER_NAVIGATION_CALLBACK";
5
+ export declare const UNREGISTER_NAVIGATION_CALLBACK = "UNREGISTER_NAVIGATION_CALLBACK";
6
+ export declare const HOMEPAGE = "";
@@ -0,0 +1,7 @@
1
+ export const UPDATE_PAGE = 'UPDATE_PAGE';
2
+ export const UPDATE_CONTEXT = 'UPDATE_CONTEXT';
3
+ export const UPDATE_ACTIVE_PAGE = 'UPDATE_ACTIVE_PAGE';
4
+ export const REGISTER_NAVIGATION_CALLBACK = 'REGISTER_NAVIGATION_CALLBACK';
5
+ export const UNREGISTER_NAVIGATION_CALLBACK = 'UNREGISTER_NAVIGATION_CALLBACK';
6
+ export const HOMEPAGE = '';
7
+ //# sourceMappingURL=const.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const.js","sourceRoot":"","sources":["../../../src/actions/const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAA;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAA;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAA;AAEtD,MAAM,CAAC,MAAM,4BAA4B,GAAG,8BAA8B,CAAA;AAC1E,MAAM,CAAC,MAAM,8BAA8B,GAAG,gCAAgC,CAAA;AAE9E,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAA","sourcesContent":["export const UPDATE_PAGE = 'UPDATE_PAGE'\nexport const UPDATE_CONTEXT = 'UPDATE_CONTEXT'\nexport const UPDATE_ACTIVE_PAGE = 'UPDATE_ACTIVE_PAGE'\n\nexport const REGISTER_NAVIGATION_CALLBACK = 'REGISTER_NAVIGATION_CALLBACK'\nexport const UNREGISTER_NAVIGATION_CALLBACK = 'UNREGISTER_NAVIGATION_CALLBACK'\n\nexport const HOMEPAGE = ''\n"]}
@@ -0,0 +1,3 @@
1
+ export * from './app';
2
+ export * from './route';
3
+ export * from './const';
@@ -0,0 +1,4 @@
1
+ export * from './app';
2
+ export * from './route';
3
+ export * from './const';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/actions/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA;AACrB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA","sourcesContent":["export * from './app'\nexport * from './route'\nexport * from './const'\n"]}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 페이지를 이동하는 방법으로는 다음 두가지가 있다.
3
+ * 1. page link를 사용하는 방법 <a href='page'>goto page</a>
4
+ * 이 방법은 route(page)와 동일하다.
5
+ * 2. navigate('page')를 사용하는 방법
6
+ *
7
+ * @param string page
8
+ */
9
+ export declare const navigate: (location: string, replace?: boolean) => void;
10
+ export declare const navigateWithSilence: ({ pathname, search, params }: {
11
+ pathname: string;
12
+ search?: string | undefined;
13
+ params?: {
14
+ [key: string]: any;
15
+ } | undefined;
16
+ }) => (dispatch: any) => void;
17
+ export declare const loadPage: (page: string, id: string, params: {
18
+ [key: string]: any;
19
+ }) => (dispatch: any) => void;
20
+ export declare const route: (url: string) => void;
@@ -0,0 +1,77 @@
1
+ import { getPathInfo } from '@operato/utils';
2
+ import { HOMEPAGE, UPDATE_PAGE } from '../actions/const';
3
+ import { store } from '../store';
4
+ /**
5
+ * 페이지를 이동하는 방법으로는 다음 두가지가 있다.
6
+ * 1. page link를 사용하는 방법 <a href='page'>goto page</a>
7
+ * 이 방법은 route(page)와 동일하다.
8
+ * 2. navigate('page')를 사용하는 방법
9
+ *
10
+ * @param string page
11
+ */
12
+ export const navigate = (location, replace) => {
13
+ if (replace)
14
+ history.replaceState(history.state, '', location);
15
+ else
16
+ history.pushState({}, '', location);
17
+ window.dispatchEvent(new Event('popstate'));
18
+ };
19
+ export const navigateWithSilence = ({ pathname: path, search, params }) => (dispatch) => {
20
+ const { path: pathname } = getPathInfo(path);
21
+ const reg = /\/([^\/]+)\/*([^\/]*)/;
22
+ const decodePath = decodeURIComponent(pathname);
23
+ const matchReturn = decodePath.match(reg) || [];
24
+ const page = matchReturn[1] || HOMEPAGE;
25
+ const id = matchReturn[2];
26
+ if (!params) {
27
+ params = {};
28
+ new URLSearchParams(search).forEach((value, key) => {
29
+ params[key] = value;
30
+ });
31
+ }
32
+ // Any other info you might want to extract from the path (like page type),
33
+ // you can do here
34
+ dispatch(loadPage(page, id, params));
35
+ };
36
+ const _preLoadPage = (page) => {
37
+ /*
38
+ * _preLoadPage 에서는 page를 load하기 전처리를 수행한다.
39
+ * 예를 들면, page dynamic import 또는 page re-routing
40
+ */
41
+ var state = store.getState();
42
+ /* override 기능을 위해서 dependency 관계의 역순으로 route를 실행한다. */
43
+ var modules = state.app.modules;
44
+ if (modules) {
45
+ for (let i = modules.length - 1; i >= 0; i--) {
46
+ let factoryModule = modules[i];
47
+ let _page = factoryModule.route && factoryModule.route(page);
48
+ if (_page) {
49
+ return _page;
50
+ }
51
+ }
52
+ }
53
+ };
54
+ export const loadPage = (page, id, params) => (dispatch) => {
55
+ var newPage = _preLoadPage(page);
56
+ if (page !== newPage && newPage.indexOf('/') == 0) {
57
+ dispatch(navigateWithSilence({
58
+ pathname: newPage,
59
+ params
60
+ }));
61
+ return;
62
+ }
63
+ dispatch({
64
+ type: UPDATE_PAGE,
65
+ page: newPage,
66
+ resourceId: id,
67
+ params
68
+ });
69
+ };
70
+ export const route = (url) => {
71
+ const link = document.createElement('a');
72
+ link.setAttribute('href', url);
73
+ document.body.appendChild(link);
74
+ link.click();
75
+ document.body.removeChild(link);
76
+ };
77
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../src/actions/route.ts"],"names":[],"mappings":"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","sourcesContent":["import { getPathInfo } from '@operato/utils'\n\nimport { HOMEPAGE, UPDATE_PAGE } from '../actions/const'\nimport { store } from '../store'\n\n/**\n * 페이지를 이동하는 방법으로는 다음 두가지가 있다.\n * 1. page link를 사용하는 방법 <a href='page'>goto page</a>\n * 이 방법은 route(page)와 동일하다.\n * 2. navigate('page')를 사용하는 방법\n *\n * @param string page\n */\nexport const navigate = (location: string, replace?: boolean) => {\n if (replace) history.replaceState(history.state, '', location)\n else history.pushState({}, '', location)\n\n window.dispatchEvent(new Event('popstate'))\n}\n\nexport const navigateWithSilence =\n ({ pathname: path, search, params }: { pathname: string; search?: string; params?: { [key: string]: any } }) =>\n (dispatch: any) => {\n const { path: pathname } = getPathInfo(path)\n\n const reg = /\\/([^\\/]+)\\/*([^\\/]*)/\n const decodePath = decodeURIComponent(pathname!)\n const matchReturn = decodePath.match(reg) || []\n const page = matchReturn[1] || HOMEPAGE\n const id = matchReturn[2]\n\n if (!params) {\n params = {}\n\n new URLSearchParams(search).forEach((value, key) => {\n params![key] = value\n })\n }\n\n // Any other info you might want to extract from the path (like page type),\n // you can do here\n dispatch(loadPage(page, id, params))\n }\n\nconst _preLoadPage = (page: any) => {\n /*\n * _preLoadPage 에서는 page를 load하기 전처리를 수행한다.\n * 예를 들면, page dynamic import 또는 page re-routing\n */\n var state: any = store.getState()\n\n /* override 기능을 위해서 dependency 관계의 역순으로 route를 실행한다. */\n var modules = state.app.modules\n if (modules) {\n for (let i = modules.length - 1; i >= 0; i--) {\n let factoryModule = modules[i]\n let _page = factoryModule.route && factoryModule.route(page)\n if (_page) {\n return _page\n }\n }\n }\n}\n\nexport const loadPage = (page: string, id: string, params: { [key: string]: any }) => (dispatch: any) => {\n var newPage = _preLoadPage(page)\n\n if (page !== newPage && newPage.indexOf('/') == 0) {\n dispatch(\n navigateWithSilence({\n pathname: newPage,\n params\n })\n )\n return\n }\n\n dispatch({\n type: UPDATE_PAGE,\n page: newPage,\n resourceId: id,\n params\n })\n}\n\nexport const route = (url: string) => {\n const link = document.createElement('a')\n\n link.setAttribute('href', url)\n\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n}\n"]}
@@ -0,0 +1 @@
1
+ export declare const AppStyle: import("lit").CSSResult;
@@ -0,0 +1,69 @@
1
+ import { css } from 'lit';
2
+ export const AppStyle = css `
3
+ :host {
4
+ display: grid;
5
+
6
+ grid-template-rows: var(--app-grid-template-rows, auto 1fr auto);
7
+ grid-template-columns: var(--app-grid-template-columns, auto 1fr auto);
8
+ grid-template-areas: var(--app-grid-template-area, 'header header header' 'nav main aside' 'nav footer aside');
9
+ grid-gap: var(--app-grid-gap, 0em);
10
+
11
+ max-width: 100vw;
12
+ width: 100vw;
13
+ height: 100vh;
14
+ }
15
+
16
+ ox-header-bar {
17
+ grid-area: header;
18
+ }
19
+
20
+ ox-nav-bar {
21
+ grid-area: nav;
22
+ }
23
+
24
+ main {
25
+ grid-area: main;
26
+
27
+ overflow: hidden;
28
+
29
+ display: flex;
30
+ flex-direction: row;
31
+ }
32
+
33
+ ox-aside-bar {
34
+ grid-area: aside;
35
+ }
36
+
37
+ ox-footer-bar {
38
+ grid-area: footer;
39
+ }
40
+
41
+ main > * {
42
+ flex: 1;
43
+ }
44
+
45
+ main > *:not([active]) {
46
+ display: none;
47
+ }
48
+
49
+ [hidden] {
50
+ display: none;
51
+ }
52
+
53
+ ox-snack-bar {
54
+ z-index: 1000;
55
+ }
56
+
57
+ /* Wide layout */
58
+ @media (min-width: 460px) {
59
+ }
60
+
61
+ @media print {
62
+ :host {
63
+ width: 100%;
64
+ height: 100%;
65
+ min-height: 100vh;
66
+ }
67
+ }
68
+ `;
69
+ //# sourceMappingURL=app-style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-style.js","sourceRoot":"","sources":["../../../src/app/app-style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkE1B,CAAA","sourcesContent":["import { css } from 'lit'\n\nexport const AppStyle = css`\n :host {\n display: grid;\n\n grid-template-rows: var(--app-grid-template-rows, auto 1fr auto);\n grid-template-columns: var(--app-grid-template-columns, auto 1fr auto);\n grid-template-areas: var(--app-grid-template-area, 'header header header' 'nav main aside' 'nav footer aside');\n grid-gap: var(--app-grid-gap, 0em);\n\n max-width: 100vw;\n width: 100vw;\n height: 100vh;\n }\n\n ox-header-bar {\n grid-area: header;\n }\n\n ox-nav-bar {\n grid-area: nav;\n }\n\n main {\n grid-area: main;\n\n overflow: hidden;\n\n display: flex;\n flex-direction: row;\n }\n\n ox-aside-bar {\n grid-area: aside;\n }\n\n ox-footer-bar {\n grid-area: footer;\n }\n\n main > * {\n flex: 1;\n }\n\n main > *:not([active]) {\n display: none;\n }\n\n [hidden] {\n display: none;\n }\n\n ox-snack-bar {\n z-index: 1000;\n }\n\n /* Wide layout */\n @media (min-width: 460px) {\n }\n\n @media print {\n :host {\n width: 100%;\n height: 100%;\n min-height: 100vh;\n }\n }\n`\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,193 @@
1
+ import { __decorate } from "tslib";
2
+ import { html, LitElement } from 'lit';
3
+ import { customElement, state } from 'lit/decorators.js';
4
+ import { connect } from 'pwa-helpers/connect-mixin.js';
5
+ import { installRouter } from 'pwa-helpers/router.js';
6
+ import { ScrollbarStyles } from '@operato/styles';
7
+ import { getPathInfo } from '@operato/utils';
8
+ import { navigateWithSilence, UPDATE_ACTIVE_PAGE, UPDATE_CONTEXT_PATH, UPDATE_MODULES } from '../actions';
9
+ import { store } from '../store';
10
+ import { AppStyle } from './app-style';
11
+ let ThingsApp = class ThingsApp extends connect(store)(LitElement) {
12
+ constructor() {
13
+ super();
14
+ this._pages = {};
15
+ this._callbacks = [];
16
+ this._modules = [];
17
+ this._moduleInitialized = false;
18
+ }
19
+ render() {
20
+ var params = this._params || {};
21
+ var fullbleed = (this._context && this._context.fullbleed) || (params.fullbleed && params.fullbleed == 'Y');
22
+ var widebleed = (this._context && this._context.widebleed) || (params.widebleed && params.widebleed == 'Y');
23
+ return html `
24
+ <ox-header-bar ?fullbleed=${fullbleed}></ox-header-bar>
25
+
26
+ <ox-nav-bar ?fullbleed=${fullbleed || widebleed}></ox-nav-bar>
27
+
28
+ <main></main>
29
+
30
+ <ox-aside-bar ?fullbleed=${fullbleed || widebleed}></ox-aside-bar>
31
+
32
+ <ox-footer-bar ?fullbleed=${fullbleed}></ox-footer-bar>
33
+
34
+ <ox-snack-bar></ox-snack-bar>
35
+ `;
36
+ }
37
+ connectedCallback() {
38
+ super.connectedCallback();
39
+ /* 모듈 임포트를 동적으로 처리한다. */
40
+ import(
41
+ /* webpackPrefetch: true */
42
+ /* webpackPreload: true */
43
+ /* webpackChunkName: "modules" */
44
+ '../module-importer.import').then(module => {
45
+ var modules = module.modules;
46
+ /* lifecycle - bootstrapping */
47
+ this.dispatchEvent(new Event('lifecycle-bootstrap-begin'));
48
+ modules.forEach((m, idx) => {
49
+ try {
50
+ m.bootstrap && m.bootstrap();
51
+ // console.info(`[${idx} BOOTSTRAPED - ${m.name}]`)
52
+ }
53
+ catch (e) {
54
+ console.error(`[${idx} BOOTSTRAP ERROR -${m.name}]`, e);
55
+ }
56
+ });
57
+ this.dispatchEvent(new Event('lifecycle-bootstrap-finish'));
58
+ /* shouldUpdate를 활성화한다. */
59
+ this._moduleInitialized = true;
60
+ /* modules를 store에 dispatch 함으로써, update를 invoke 시킨다. */
61
+ store.dispatch({
62
+ type: UPDATE_MODULES,
63
+ modules
64
+ });
65
+ installRouter((location, e) => {
66
+ var { contextPath } = getPathInfo(location.pathname);
67
+ if (this._contextPath !== contextPath) {
68
+ store.dispatch({
69
+ type: UPDATE_CONTEXT_PATH,
70
+ contextPath
71
+ });
72
+ }
73
+ store.dispatch(navigateWithSilence(location));
74
+ this._callbacks &&
75
+ this._callbacks.forEach(callback => {
76
+ try {
77
+ callback.call(this, location, e);
78
+ }
79
+ catch (ex) {
80
+ console.error(ex);
81
+ }
82
+ });
83
+ });
84
+ });
85
+ this.setBase();
86
+ }
87
+ routeToPage() {
88
+ let activePages = this.renderRoot.querySelectorAll('main > .page[active]');
89
+ activePages.forEach(page => {
90
+ page.removeAttribute('active');
91
+ });
92
+ this._activePage = this.renderRoot.querySelector(`main > .page[data-page=${this._page}]`);
93
+ if (!this._activePage) {
94
+ /* 해당 route에 연결된 page가 없는 경우에 main 섹션에 해당 element를 추가해준다. */
95
+ var tagname = this._pages[this._page];
96
+ if (tagname) {
97
+ var main = this.renderRoot.querySelector('main');
98
+ var el = document.createElement(tagname);
99
+ el.setAttribute('class', 'page');
100
+ el.setAttribute('data-page', this._page);
101
+ main === null || main === void 0 ? void 0 : main.appendChild(el);
102
+ this._activePage = el;
103
+ }
104
+ }
105
+ if (this._activePage) {
106
+ this._activePage.setAttribute('active', true);
107
+ this._activePage.setAttribute('context-path', this._contextPath);
108
+ this._activePage.lifecycle = {
109
+ ...(this._activePage.lifecycle || {}),
110
+ active: true,
111
+ params: this._params,
112
+ resourceId: this._resourceId,
113
+ page: this._page
114
+ };
115
+ }
116
+ store.dispatch({
117
+ type: UPDATE_ACTIVE_PAGE,
118
+ activePage: this._activePage
119
+ });
120
+ }
121
+ async updated(changes) {
122
+ if (changes.has('_modules')) {
123
+ this._readyPageList();
124
+ }
125
+ if (changes.has('_page') || changes.has('_resourceId') || changes.has('_params')) {
126
+ this.routeToPage();
127
+ }
128
+ if (changes.has('_contextPath')) {
129
+ this.setBase();
130
+ }
131
+ }
132
+ shouldUpdate() {
133
+ return this._moduleInitialized;
134
+ }
135
+ stateChanged(state) {
136
+ this._page = state.route.page;
137
+ this._params = state.route.params;
138
+ this._resourceId = state.route.resourceId;
139
+ this._callbacks = state.route.callbacks;
140
+ this._context = state.route.context;
141
+ this._modules = state.app.modules;
142
+ this._contextPath = state.app.contextPath;
143
+ }
144
+ _readyPageList() {
145
+ var reversedModules = [...this._modules].reverse();
146
+ this._pages = {};
147
+ /* 모듈 참조 순서 역순으로 page를 추가한다. (for overidable) */
148
+ reversedModules.forEach(m => {
149
+ m.routes &&
150
+ m.routes.forEach((route) => {
151
+ if (!this._pages[route.page]) {
152
+ this._pages[route.page] = route.tagname;
153
+ }
154
+ });
155
+ });
156
+ }
157
+ setBase() {
158
+ var base = document.querySelector('base');
159
+ base === null || base === void 0 ? void 0 : base.setAttribute('href', this._contextPath ? `${this._contextPath}/` : '/');
160
+ }
161
+ };
162
+ ThingsApp.styles = [ScrollbarStyles, AppStyle];
163
+ __decorate([
164
+ state()
165
+ ], ThingsApp.prototype, "_contextPath", void 0);
166
+ __decorate([
167
+ state()
168
+ ], ThingsApp.prototype, "_page", void 0);
169
+ __decorate([
170
+ state()
171
+ ], ThingsApp.prototype, "_pages", void 0);
172
+ __decorate([
173
+ state()
174
+ ], ThingsApp.prototype, "_resourceId", void 0);
175
+ __decorate([
176
+ state()
177
+ ], ThingsApp.prototype, "_params", void 0);
178
+ __decorate([
179
+ state()
180
+ ], ThingsApp.prototype, "_callbacks", void 0);
181
+ __decorate([
182
+ state()
183
+ ], ThingsApp.prototype, "_activePage", void 0);
184
+ __decorate([
185
+ state()
186
+ ], ThingsApp.prototype, "_context", void 0);
187
+ __decorate([
188
+ state()
189
+ ], ThingsApp.prototype, "_modules", void 0);
190
+ ThingsApp = __decorate([
191
+ customElement('things-app')
192
+ ], ThingsApp);
193
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/app/app.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, PropertyValues } from 'lit'\nimport { customElement, state } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\nimport { installRouter } from 'pwa-helpers/router.js'\n\nimport { ScrollbarStyles } from '@operato/styles'\nimport { getPathInfo } from '@operato/utils'\n\nimport { navigateWithSilence, UPDATE_ACTIVE_PAGE, UPDATE_CONTEXT_PATH, UPDATE_MODULES } from '../actions'\nimport { store } from '../store'\nimport { AppStyle } from './app-style'\n\n@customElement('things-app')\nclass ThingsApp extends connect(store)(LitElement) {\n static styles = [ScrollbarStyles, AppStyle]\n\n @state() _contextPath?: string\n @state() _page?: string\n @state() _pages: { [path: string]: string } = {}\n @state() _resourceId?: string\n @state() _params?: any\n @state() _callbacks: Array<any> = []\n @state() _activePage: any\n @state() _context: any\n @state() _modules: Array<any> = []\n\n _moduleInitialized = false\n\n render() {\n var params = this._params || {}\n var fullbleed = (this._context && this._context.fullbleed) || (params.fullbleed && params.fullbleed == 'Y')\n var widebleed = (this._context && this._context.widebleed) || (params.widebleed && params.widebleed == 'Y')\n\n return html`\n <ox-header-bar ?fullbleed=${fullbleed}></ox-header-bar>\n\n <ox-nav-bar ?fullbleed=${fullbleed || widebleed}></ox-nav-bar>\n\n <main></main>\n\n <ox-aside-bar ?fullbleed=${fullbleed || widebleed}></ox-aside-bar>\n\n <ox-footer-bar ?fullbleed=${fullbleed}></ox-footer-bar>\n\n <ox-snack-bar></ox-snack-bar>\n `\n }\n\n constructor() {\n super()\n }\n\n connectedCallback() {\n super.connectedCallback()\n\n /* 모듈 임포트를 동적으로 처리한다. */\n import(\n /* webpackPrefetch: true */\n /* webpackPreload: true */\n /* webpackChunkName: \"modules\" */\n '../module-importer.import'\n ).then(module => {\n var modules: {\n name: string\n bootstrap: any\n }[] = module.modules\n\n /* lifecycle - bootstrapping */\n this.dispatchEvent(new Event('lifecycle-bootstrap-begin'))\n modules.forEach((m, idx) => {\n try {\n m.bootstrap && m.bootstrap()\n // console.info(`[${idx} BOOTSTRAPED - ${m.name}]`)\n } catch (e) {\n console.error(`[${idx} BOOTSTRAP ERROR -${m.name}]`, e)\n }\n })\n this.dispatchEvent(new Event('lifecycle-bootstrap-finish'))\n\n /* shouldUpdate를 활성화한다. */\n this._moduleInitialized = true\n\n /* modules를 store에 dispatch 함으로써, update를 invoke 시킨다. */\n store.dispatch({\n type: UPDATE_MODULES,\n modules\n })\n\n installRouter((location, e) => {\n var { contextPath } = getPathInfo(location.pathname)\n\n if (this._contextPath !== contextPath) {\n store.dispatch({\n type: UPDATE_CONTEXT_PATH,\n contextPath\n })\n }\n\n store.dispatch(navigateWithSilence(location) as any)\n this._callbacks &&\n this._callbacks.forEach(callback => {\n try {\n callback.call(this, location, e)\n } catch (ex) {\n console.error(ex)\n }\n })\n })\n })\n\n this.setBase()\n }\n\n routeToPage() {\n let activePages = this.renderRoot.querySelectorAll('main > .page[active]')\n activePages.forEach(page => {\n page.removeAttribute('active')\n })\n\n this._activePage = this.renderRoot.querySelector(`main > .page[data-page=${this._page}]`)\n\n if (!this._activePage) {\n /* 해당 route에 연결된 page가 없는 경우에 main 섹션에 해당 element를 추가해준다. */\n var tagname = this._pages[this._page!]\n if (tagname) {\n var main = this.renderRoot.querySelector('main')\n\n var el = document.createElement(tagname)\n el.setAttribute('class', 'page')\n el.setAttribute('data-page', this._page!)\n\n main?.appendChild(el)\n\n this._activePage = el\n }\n }\n\n if (this._activePage) {\n this._activePage.setAttribute('active', true)\n this._activePage.setAttribute('context-path', this._contextPath)\n this._activePage.lifecycle = {\n ...(this._activePage.lifecycle || {}),\n active: true,\n params: this._params,\n resourceId: this._resourceId,\n page: this._page\n }\n }\n\n store.dispatch({\n type: UPDATE_ACTIVE_PAGE,\n activePage: this._activePage\n })\n }\n\n async updated(changes: PropertyValues<this>) {\n if (changes.has('_modules')) {\n this._readyPageList()\n }\n\n if (changes.has('_page') || changes.has('_resourceId') || changes.has('_params')) {\n this.routeToPage()\n }\n\n if (changes.has('_contextPath')) {\n this.setBase()\n }\n }\n\n shouldUpdate() {\n return this._moduleInitialized\n }\n\n stateChanged(state: any) {\n this._page = state.route.page\n this._params = state.route.params\n this._resourceId = state.route.resourceId\n this._callbacks = state.route.callbacks\n this._context = state.route.context\n this._modules = state.app.modules\n this._contextPath = state.app.contextPath\n }\n\n _readyPageList() {\n var reversedModules = [...this._modules].reverse()\n this._pages = {}\n\n /* 모듈 참조 순서 역순으로 page를 추가한다. (for overidable) */\n reversedModules.forEach(m => {\n m.routes &&\n m.routes.forEach((route: any) => {\n if (!this._pages[route.page]) {\n this._pages[route.page] = route.tagname\n }\n })\n })\n }\n\n setBase() {\n var base = document.querySelector('base')\n base?.setAttribute('href', this._contextPath ? `${this._contextPath}/` : '/')\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { PageView } from './page-view';
2
+ export declare class Page404 extends PageView {
3
+ static styles: import("lit").CSSResult;
4
+ get context(): {
5
+ title: string;
6
+ };
7
+ render(): import("lit-html").TemplateResult<1>;
8
+ }
@@ -0,0 +1,57 @@
1
+ import { __decorate } from "tslib";
2
+ import { css, html } from 'lit';
3
+ import { customElement } from 'lit/decorators.js';
4
+ import { PageView } from './page-view';
5
+ let Page404 = class Page404 extends PageView {
6
+ get context() {
7
+ return {
8
+ title: 'Page Not Found'
9
+ };
10
+ }
11
+ render() {
12
+ return html `
13
+ <section>
14
+ <mwc-icon>error_outline</mwc-icon>
15
+ <h2>page not found!</h2>
16
+ The page you requested cannot be found.
17
+ </section>
18
+ `;
19
+ }
20
+ };
21
+ Page404.styles = css `
22
+ :host {
23
+ display: block;
24
+ box-sizing: border-box;
25
+ background-color: var(--main-section-background-color);
26
+ --padding-wide: 15%;
27
+ }
28
+ section {
29
+ padding: var(--padding-wide) 0 0 0;
30
+ text-align: center;
31
+ color: var(--secondary-color);
32
+ }
33
+ mwc-icon {
34
+ --mdc-icon-size: 120px;
35
+ color: var(--status-danger-color);
36
+ text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.1);
37
+ }
38
+ h2 {
39
+ margin: 0 auto;
40
+ font-size: 2.5em;
41
+ text-transform: capitalize;
42
+ }
43
+ @media only screen and (max-width: 460px) {
44
+ mwc-icon {
45
+ padding-top: 25%;
46
+ --mdc-icon-size: 90px;
47
+ }
48
+ h2 {
49
+ font-size: 2em;
50
+ }
51
+ }
52
+ `;
53
+ Page404 = __decorate([
54
+ customElement('page-404')
55
+ ], Page404);
56
+ export { Page404 };
57
+ //# sourceMappingURL=page-404.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-404.js","sourceRoot":"","sources":["../../../../src/app/pages/page-404.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAG/B,IAAM,OAAO,GAAb,MAAM,OAAQ,SAAQ,QAAQ;IAkCnC,IAAI,OAAO;QACT,OAAO;YACL,KAAK,EAAE,gBAAgB;SACxB,CAAA;IACH,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;KAMV,CAAA;IACH,CAAC;;AA/CM,cAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BlB,CAAA;AAhCU,OAAO;IADnB,aAAa,CAAC,UAAU,CAAC;GACb,OAAO,CAiDnB;SAjDY,OAAO","sourcesContent":["import { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\nimport { PageView } from './page-view'\n\n@customElement('page-404')\nexport class Page404 extends PageView {\n static styles = css`\n :host {\n display: block;\n box-sizing: border-box;\n background-color: var(--main-section-background-color);\n --padding-wide: 15%;\n }\n section {\n padding: var(--padding-wide) 0 0 0;\n text-align: center;\n color: var(--secondary-color);\n }\n mwc-icon {\n --mdc-icon-size: 120px;\n color: var(--status-danger-color);\n text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.1);\n }\n h2 {\n margin: 0 auto;\n font-size: 2.5em;\n text-transform: capitalize;\n }\n @media only screen and (max-width: 460px) {\n mwc-icon {\n padding-top: 25%;\n --mdc-icon-size: 90px;\n }\n h2 {\n font-size: 2em;\n }\n }\n `\n\n get context() {\n return {\n title: 'Page Not Found'\n }\n }\n\n render() {\n return html`\n <section>\n <mwc-icon>error_outline</mwc-icon>\n <h2>page not found!</h2>\n The page you requested cannot be found.\n </section>\n `\n }\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import { LitElement, PropertyValues } from 'lit';
2
+ export declare class PageView extends LitElement {
3
+ shouldUpdate(changes: PropertyValues<this>): boolean;
4
+ active: boolean;
5
+ lifecycle: any;
6
+ contextPath?: string;
7
+ _oldLifecycleInfo$: any;
8
+ pageUpdate(changes?: any, force?: boolean): Promise<void>;
9
+ pageReset(): Promise<void>;
10
+ pageDispose(): Promise<void>;
11
+ pageInitialized(pageInfo: any): void;
12
+ pageUpdated(changes: any, after: any, before: any): void;
13
+ pageDisposed(pageInfo: any): void;
14
+ updateContext(override?: any): void;
15
+ get context(): {};
16
+ }