gatsby-theme-q3 3.1.4 → 3.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +74 -35
- package/gatsby-browser.js +29 -0
- package/gatsby-config.js +7 -47
- package/gatsby-node.js +0 -1
- package/lib/components/PageWrapper.js +2 -11
- package/lib/components/PublicTemplate.js +125 -6
- package/lib/components/PublicTemplateBackground.js +120 -0
- package/lib/components/SearchEngine.js +67 -20
- package/lib/components/Wrapper.js +3 -25
- package/lib/components/__tests__/SearchEngine.test.js +41 -0
- package/lib/components/useSiteMetaData.js +13 -12
- package/lib/components/withPublicTemplate.js +17 -0
- package/lib/components/withSuccessOp.js +1 -1
- package/lib/pages/login.js +5 -3
- package/lib/pages/password-change.js +4 -3
- package/lib/pages/password-reset.js +4 -3
- package/lib/pages/reverify.js +5 -2
- package/lib/pages/verify.js +5 -3
- package/package.json +6 -6
- package/src/components/PageWrapper.jsx +1 -13
- package/src/components/PublicTemplate.jsx +129 -5
- package/src/components/PublicTemplateBackground.jsx +140 -0
- package/src/components/SearchEngine.jsx +82 -23
- package/src/components/Wrapper.jsx +3 -27
- package/src/components/__tests__/SearchEngine.test.jsx +58 -0
- package/src/components/useSiteMetaData.js +17 -16
- package/src/components/withPublicTemplate.jsx +11 -0
- package/src/components/withSuccessOp.jsx +1 -1
- package/src/pages/login.jsx +51 -43
- package/src/pages/password-change.jsx +5 -3
- package/src/pages/password-reset.jsx +5 -3
- package/src/pages/reverify.jsx +4 -2
- package/src/pages/verify.jsx +9 -12
- package/__tests__/config.int.test.js +0 -73
- package/helpers/__tests__/loadContent.unit.test.js +0 -13
- package/helpers/__tests__/pagination.unit.test.js +0 -139
- package/helpers/__tests__/slug.unit.test.js +0 -21
- package/helpers/archive.js +0 -42
- package/helpers/index.js +0 -19
- package/helpers/loadContent.js +0 -45
- package/helpers/loadTheme.js +0 -10
- package/helpers/pagination.js +0 -109
- package/helpers/setup.js +0 -60
- package/helpers/slug.js +0 -31
- package/helpers/slugType.js +0 -24
- package/lib/components/LocaleBundles.js +0 -42
- package/lib/components/useLocale.js +0 -31
- package/src/components/LocaleBundles.jsx +0 -37
- package/src/components/useLocale.js +0 -20
@@ -1,139 +0,0 @@
|
|
1
|
-
const {
|
2
|
-
genCursor,
|
3
|
-
appendSiblingsToContext,
|
4
|
-
getPreviousArchiveUrl,
|
5
|
-
getNextArchiveUrl,
|
6
|
-
getNumberOfPages,
|
7
|
-
paginateArchiveContext,
|
8
|
-
} = require('../pagination');
|
9
|
-
|
10
|
-
const genEntries = () => {
|
11
|
-
const entries = [];
|
12
|
-
for (let i = 0; i < 30; i += 1) entries.push(i);
|
13
|
-
return entries;
|
14
|
-
};
|
15
|
-
|
16
|
-
describe('pagination', () => {
|
17
|
-
describe('"genCursor"', () => {
|
18
|
-
const stub = ['foo', 'bar', 'quuz', 'garply'];
|
19
|
-
const cursor = genCursor(stub, 2);
|
20
|
-
// current index targets "quuz"
|
21
|
-
|
22
|
-
it('should identify first item', () => {
|
23
|
-
expect(cursor.first).toMatch('foo');
|
24
|
-
});
|
25
|
-
|
26
|
-
it('should identify last item', () => {
|
27
|
-
expect(cursor.last).toMatch('garply');
|
28
|
-
});
|
29
|
-
|
30
|
-
it('should identify next item', () => {
|
31
|
-
expect(cursor.next).toMatch('garply');
|
32
|
-
});
|
33
|
-
|
34
|
-
it('should identify previous item', () => {
|
35
|
-
expect(cursor.prev).toMatch('bar');
|
36
|
-
});
|
37
|
-
|
38
|
-
it('should identify first position', () => {
|
39
|
-
expect(cursor.isFirst).toBeFalsy();
|
40
|
-
expect(genCursor(stub, 0).isFirst).toBeTruthy();
|
41
|
-
});
|
42
|
-
|
43
|
-
it('should identify last position', () => {
|
44
|
-
expect(cursor.isLast).toBeFalsy();
|
45
|
-
expect(genCursor(stub, 3).isLast).toBeTruthy();
|
46
|
-
});
|
47
|
-
});
|
48
|
-
|
49
|
-
describe('"appendSiblingsToContext"', () => {
|
50
|
-
const mockContentfulEntry = (id) => ({
|
51
|
-
contentful_id: id,
|
52
|
-
});
|
53
|
-
|
54
|
-
const stubWithContentful = [
|
55
|
-
mockContentfulEntry(1),
|
56
|
-
mockContentfulEntry(2),
|
57
|
-
mockContentfulEntry(3),
|
58
|
-
];
|
59
|
-
|
60
|
-
it('should map contentful entries using cursor', () => {
|
61
|
-
const entries = appendSiblingsToContext(
|
62
|
-
stubWithContentful,
|
63
|
-
);
|
64
|
-
expect(entries[0]).toMatchObject({
|
65
|
-
prev: 3,
|
66
|
-
next: 2,
|
67
|
-
});
|
68
|
-
expect(entries[2]).toMatchObject({
|
69
|
-
prev: 2,
|
70
|
-
next: 1,
|
71
|
-
});
|
72
|
-
});
|
73
|
-
});
|
74
|
-
|
75
|
-
describe('"getPreviousArchiveUrl"', () => {
|
76
|
-
it('should return null', () => {
|
77
|
-
expect(getPreviousArchiveUrl('/foo', 1)).toBeNull();
|
78
|
-
});
|
79
|
-
|
80
|
-
it('should return archive', () => {
|
81
|
-
expect(getPreviousArchiveUrl('/foo', 2)).toEqual(
|
82
|
-
'/foo',
|
83
|
-
);
|
84
|
-
});
|
85
|
-
|
86
|
-
it('should return archive sub-directory', () => {
|
87
|
-
expect(getPreviousArchiveUrl('/foo', 3)).toEqual(
|
88
|
-
'/foo/2',
|
89
|
-
);
|
90
|
-
});
|
91
|
-
});
|
92
|
-
|
93
|
-
describe('"getNextArchiveUrl"', () => {
|
94
|
-
it('should return sub-directory', () => {
|
95
|
-
expect(getNextArchiveUrl('/foo', 8, 9)).toEqual(
|
96
|
-
'/foo/9',
|
97
|
-
);
|
98
|
-
});
|
99
|
-
|
100
|
-
it('should return null', () => {
|
101
|
-
expect(getNextArchiveUrl('/foo', 9, 9)).toBeNull();
|
102
|
-
});
|
103
|
-
});
|
104
|
-
|
105
|
-
describe('"getNumberOfPages"', () => {
|
106
|
-
it('should return number divisible by', () => {
|
107
|
-
expect(getNumberOfPages(genEntries(), 5)).toBe(6);
|
108
|
-
});
|
109
|
-
});
|
110
|
-
|
111
|
-
describe('"paginateArchiveContext"', () => {
|
112
|
-
it('should return pagination meta', () => {
|
113
|
-
// default 15 per page
|
114
|
-
const res = paginateArchiveContext(
|
115
|
-
genEntries(),
|
116
|
-
'/foo',
|
117
|
-
);
|
118
|
-
|
119
|
-
expect(res).toHaveLength(2);
|
120
|
-
expect(res[0]).toMatchObject({
|
121
|
-
path: '/foo',
|
122
|
-
limit: 15,
|
123
|
-
skip: 0,
|
124
|
-
pageNum: 0,
|
125
|
-
prev: null,
|
126
|
-
next: '/foo/2',
|
127
|
-
});
|
128
|
-
|
129
|
-
expect(res[1]).toMatchObject({
|
130
|
-
path: '/foo/2',
|
131
|
-
limit: 15,
|
132
|
-
skip: 15,
|
133
|
-
pageNum: 1,
|
134
|
-
prev: '/foo',
|
135
|
-
next: null,
|
136
|
-
});
|
137
|
-
});
|
138
|
-
});
|
139
|
-
});
|
@@ -1,21 +0,0 @@
|
|
1
|
-
const slug = require('../slug');
|
2
|
-
|
3
|
-
describe('slug', () => {
|
4
|
-
it('should combine use slug attribute', () => {
|
5
|
-
expect(
|
6
|
-
slug({ slug: 'already-formatted-as-slug' }),
|
7
|
-
).toMatch('/already-formatted-as-slug');
|
8
|
-
});
|
9
|
-
|
10
|
-
it('should combine use title attribute', () => {
|
11
|
-
expect(
|
12
|
-
slug({ title: 'This is a post' }, 'foos'),
|
13
|
-
).toMatch('/foos/this-is-a-post');
|
14
|
-
});
|
15
|
-
|
16
|
-
it('should combine use name attribute', () => {
|
17
|
-
expect(slug({ name: "Post's name" }, '/foos')).toMatch(
|
18
|
-
'/foos/posts-name',
|
19
|
-
);
|
20
|
-
});
|
21
|
-
});
|
package/helpers/archive.js
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
const { get } = require('lodash');
|
2
|
-
const { resolve } = require('path');
|
3
|
-
const {
|
4
|
-
appendSiblingsToContext,
|
5
|
-
paginateArchiveContext,
|
6
|
-
} = require('./pagination');
|
7
|
-
|
8
|
-
module.exports = ({
|
9
|
-
archiveComponentRelativePath,
|
10
|
-
createPage,
|
11
|
-
detailComponentRelativePath,
|
12
|
-
nodesKeyName,
|
13
|
-
slug,
|
14
|
-
}) => async ({ data, errors }) => {
|
15
|
-
if (errors) throw errors;
|
16
|
-
const { nodes = [] } = get(data, nodesKeyName, {
|
17
|
-
nodes: [],
|
18
|
-
});
|
19
|
-
|
20
|
-
const archives = appendSiblingsToContext(nodes).map(
|
21
|
-
(context) =>
|
22
|
-
createPage({
|
23
|
-
path:
|
24
|
-
// see slugType for more details on this field
|
25
|
-
context.to || `/${slug}/${context.contentful_id}`,
|
26
|
-
component: resolve(detailComponentRelativePath),
|
27
|
-
context,
|
28
|
-
}),
|
29
|
-
);
|
30
|
-
|
31
|
-
const entries = paginateArchiveContext(nodes, slug).map(
|
32
|
-
({ path, ...context }) =>
|
33
|
-
createPage({
|
34
|
-
component: resolve(archiveComponentRelativePath),
|
35
|
-
path,
|
36
|
-
context,
|
37
|
-
}),
|
38
|
-
);
|
39
|
-
|
40
|
-
await Promise.all(archives);
|
41
|
-
await Promise.all(entries);
|
42
|
-
};
|
package/helpers/index.js
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
const ArchiveBuilder = require('./archive');
|
2
|
-
const loadContent = require('./loadContent');
|
3
|
-
const {
|
4
|
-
appendSiblingsToContext,
|
5
|
-
paginateArchiveContext,
|
6
|
-
} = require('./pagination');
|
7
|
-
const slug = require('./slug');
|
8
|
-
const slugType = require('./slugType');
|
9
|
-
const setup = require('./setup');
|
10
|
-
|
11
|
-
module.exports = {
|
12
|
-
ArchiveBuilder,
|
13
|
-
loadContent,
|
14
|
-
appendSiblingsToContext,
|
15
|
-
paginateArchiveContext,
|
16
|
-
setup,
|
17
|
-
slug,
|
18
|
-
slugType,
|
19
|
-
};
|
package/helpers/loadContent.js
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
const fs = require('fs');
|
2
|
-
const path = require('path');
|
3
|
-
|
4
|
-
const readJsonFile = (dir, filename) => {
|
5
|
-
try {
|
6
|
-
const file = path.resolve(dir, filename);
|
7
|
-
const buffer = fs.readFileSync(file);
|
8
|
-
return JSON.parse(buffer);
|
9
|
-
} catch (e) {
|
10
|
-
return {};
|
11
|
-
}
|
12
|
-
};
|
13
|
-
|
14
|
-
const reduceFileSystem = (name, next) =>
|
15
|
-
fs
|
16
|
-
.readdirSync(name, { withFileTypes: true })
|
17
|
-
.reduce(next, {});
|
18
|
-
|
19
|
-
const getJsonFileNameFromDirent = ({ name }) =>
|
20
|
-
path.basename(name, '.json');
|
21
|
-
|
22
|
-
const readFilePathFromDirent = ({ name }, root, next) =>
|
23
|
-
next(path.join(root, name));
|
24
|
-
|
25
|
-
const recurseFileSystem = (pathName) =>
|
26
|
-
reduceFileSystem(pathName, (curr, dirent) =>
|
27
|
-
Object.assign(curr, {
|
28
|
-
[getJsonFileNameFromDirent(
|
29
|
-
dirent,
|
30
|
-
)]: dirent.isDirectory()
|
31
|
-
? readFilePathFromDirent(
|
32
|
-
dirent,
|
33
|
-
pathName,
|
34
|
-
recurseFileSystem,
|
35
|
-
)
|
36
|
-
: readJsonFile(pathName, dirent.name),
|
37
|
-
}),
|
38
|
-
);
|
39
|
-
|
40
|
-
recurseFileSystem.readJsonFile = readJsonFile;
|
41
|
-
recurseFileSystem.reduceFileSystem = reduceFileSystem;
|
42
|
-
recurseFileSystem.getJsonFileNameFromDirent = getJsonFileNameFromDirent;
|
43
|
-
recurseFileSystem.readFilePathFromDirent = readFilePathFromDirent;
|
44
|
-
|
45
|
-
module.exports = recurseFileSystem;
|
package/helpers/loadTheme.js
DELETED
package/helpers/pagination.js
DELETED
@@ -1,109 +0,0 @@
|
|
1
|
-
const { get } = require('lodash');
|
2
|
-
|
3
|
-
const getId = (v) => get(v, 'contentful_id');
|
4
|
-
|
5
|
-
const genCursor = (a = [], i = 0) => ({
|
6
|
-
isFirst: i === 0,
|
7
|
-
isLast: i === a.length - 1,
|
8
|
-
next: a[i + 1],
|
9
|
-
prev: a[i - 1],
|
10
|
-
first: a[0],
|
11
|
-
last: a[a.length - 1],
|
12
|
-
});
|
13
|
-
|
14
|
-
const joinArchiveUrlWithPageNumber = (url, page) =>
|
15
|
-
`${url}/${page}`;
|
16
|
-
|
17
|
-
const getPreviousArchiveUrl = (archiveUrl, page) => {
|
18
|
-
if (page === 2) return archiveUrl;
|
19
|
-
if (page !== 1)
|
20
|
-
return joinArchiveUrlWithPageNumber(
|
21
|
-
archiveUrl,
|
22
|
-
page - 1,
|
23
|
-
);
|
24
|
-
|
25
|
-
return null;
|
26
|
-
};
|
27
|
-
|
28
|
-
const getNextArchiveUrl = (
|
29
|
-
archiveUrl,
|
30
|
-
page,
|
31
|
-
totalNumberOfPages,
|
32
|
-
) => {
|
33
|
-
if (page < totalNumberOfPages)
|
34
|
-
return joinArchiveUrlWithPageNumber(
|
35
|
-
archiveUrl,
|
36
|
-
page + 1,
|
37
|
-
);
|
38
|
-
|
39
|
-
return null;
|
40
|
-
};
|
41
|
-
|
42
|
-
const getCurrentArchiveUrl = (archiveUrl, page) =>
|
43
|
-
page < 2
|
44
|
-
? archiveUrl
|
45
|
-
: joinArchiveUrlWithPageNumber(archiveUrl, page);
|
46
|
-
|
47
|
-
const getNumberOfPages = (
|
48
|
-
entries = [],
|
49
|
-
postsPerPage = 15,
|
50
|
-
) => {
|
51
|
-
const len = Array.isArray(entries) ? entries.length : 0;
|
52
|
-
return Math.ceil(len / postsPerPage);
|
53
|
-
};
|
54
|
-
|
55
|
-
const appendSiblingsToContext = (entries) =>
|
56
|
-
entries.map((node, i) => {
|
57
|
-
const cursor = genCursor(entries, i);
|
58
|
-
const prev = getId(
|
59
|
-
cursor.isFirst ? cursor.last : cursor.prev,
|
60
|
-
);
|
61
|
-
|
62
|
-
const next = getId(
|
63
|
-
cursor.isLast ? cursor.first : cursor.next,
|
64
|
-
);
|
65
|
-
|
66
|
-
return {
|
67
|
-
...node,
|
68
|
-
prev,
|
69
|
-
next,
|
70
|
-
};
|
71
|
-
});
|
72
|
-
|
73
|
-
const paginateArchiveContext = (entries = [], pathName) => {
|
74
|
-
const postsPerPage = 15;
|
75
|
-
const numPages = getNumberOfPages(entries, postsPerPage);
|
76
|
-
const output = [];
|
77
|
-
|
78
|
-
for (let i = 0; i < numPages; i += 1) {
|
79
|
-
const page = i + 1; // always offset for pretty URLs
|
80
|
-
const path = getCurrentArchiveUrl(pathName, page);
|
81
|
-
const prev = getPreviousArchiveUrl(pathName, page);
|
82
|
-
const next = getNextArchiveUrl(
|
83
|
-
pathName,
|
84
|
-
page,
|
85
|
-
numPages,
|
86
|
-
);
|
87
|
-
|
88
|
-
output.push({
|
89
|
-
limit: postsPerPage,
|
90
|
-
skip: i * postsPerPage,
|
91
|
-
total: numPages,
|
92
|
-
pageNum: i,
|
93
|
-
path,
|
94
|
-
next,
|
95
|
-
prev,
|
96
|
-
});
|
97
|
-
}
|
98
|
-
|
99
|
-
return output;
|
100
|
-
};
|
101
|
-
|
102
|
-
module.exports = {
|
103
|
-
appendSiblingsToContext,
|
104
|
-
genCursor,
|
105
|
-
getNextArchiveUrl,
|
106
|
-
getNumberOfPages,
|
107
|
-
getPreviousArchiveUrl,
|
108
|
-
paginateArchiveContext,
|
109
|
-
};
|
package/helpers/setup.js
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
const path = require('path');
|
2
|
-
const fs = require('fs');
|
3
|
-
const { compact, get } = require('lodash');
|
4
|
-
const loadContent = require('./loadContent');
|
5
|
-
const loadTheme = require('./loadTheme');
|
6
|
-
|
7
|
-
const getFile =
|
8
|
-
(directory) =>
|
9
|
-
(possibleFileNames = []) =>
|
10
|
-
possibleFileNames.reduce((acc, curr) => {
|
11
|
-
if (acc) return acc;
|
12
|
-
const filename = path.resolve(directory, curr);
|
13
|
-
return fs.existsSync(filename) ? filename : undefined;
|
14
|
-
}, undefined);
|
15
|
-
|
16
|
-
module.exports = (
|
17
|
-
siteMetadata,
|
18
|
-
plugins = [],
|
19
|
-
workingDirection = process.cwd(),
|
20
|
-
) => {
|
21
|
-
const f = getFile(workingDirection);
|
22
|
-
|
23
|
-
const locale = loadContent(f(['locale', 'lang']));
|
24
|
-
const theme = loadTheme(
|
25
|
-
f(['theme.js', 'gatsby-theme.js', 'mui.js']),
|
26
|
-
);
|
27
|
-
|
28
|
-
return {
|
29
|
-
siteMetadata: {
|
30
|
-
appDirectory: '/app',
|
31
|
-
author: '3merge',
|
32
|
-
description: '',
|
33
|
-
siteUrl: 'https://3merge.ca/',
|
34
|
-
...siteMetadata,
|
35
|
-
},
|
36
|
-
plugins: compact(
|
37
|
-
[
|
38
|
-
{
|
39
|
-
resolve: 'gatsby-theme-q3',
|
40
|
-
options: {
|
41
|
-
icon: f([
|
42
|
-
'static/favicon.png',
|
43
|
-
'static/favicon.jpg',
|
44
|
-
]),
|
45
|
-
|
46
|
-
brandingColor: get(
|
47
|
-
theme,
|
48
|
-
'palette.primary.main',
|
49
|
-
'#000',
|
50
|
-
),
|
51
|
-
|
52
|
-
locale,
|
53
|
-
theme,
|
54
|
-
...siteMetadata,
|
55
|
-
},
|
56
|
-
},
|
57
|
-
].concat(plugins),
|
58
|
-
),
|
59
|
-
};
|
60
|
-
};
|
package/helpers/slug.js
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
const slugify = require('slugify');
|
2
|
-
|
3
|
-
const getSlug = (target) => {
|
4
|
-
const keys = ['slug', 'title', 'name', 'contentful_id'];
|
5
|
-
|
6
|
-
let slug;
|
7
|
-
let i = 0;
|
8
|
-
|
9
|
-
do {
|
10
|
-
const v = target[keys[i]];
|
11
|
-
if (v)
|
12
|
-
slug = slugify(v, {
|
13
|
-
replacement: '-',
|
14
|
-
remove: undefined,
|
15
|
-
lower: true,
|
16
|
-
strict: true,
|
17
|
-
});
|
18
|
-
|
19
|
-
i += 1;
|
20
|
-
} while (!slug);
|
21
|
-
|
22
|
-
return slug;
|
23
|
-
};
|
24
|
-
|
25
|
-
const getDirectoryPath = (v) => {
|
26
|
-
if (typeof v !== 'string') return '/';
|
27
|
-
return v.startsWith('/') ? v : `/${v}`;
|
28
|
-
};
|
29
|
-
|
30
|
-
module.exports = (node = {}, basepath = '/') =>
|
31
|
-
[getDirectoryPath(basepath), getSlug(node)].join('/');
|
package/helpers/slugType.js
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
const slug = require('./slug');
|
2
|
-
|
3
|
-
module.exports = (
|
4
|
-
dir,
|
5
|
-
resourceName,
|
6
|
-
{ createFieldExtension, createTypes },
|
7
|
-
) => {
|
8
|
-
// mirrors reach router prop
|
9
|
-
// an unlikely name otherwise
|
10
|
-
const resolverKey = 'to';
|
11
|
-
|
12
|
-
createFieldExtension({
|
13
|
-
name: resolverKey,
|
14
|
-
extend: () => ({
|
15
|
-
resolve: (source) => slug(source, dir),
|
16
|
-
}),
|
17
|
-
});
|
18
|
-
|
19
|
-
createTypes(`
|
20
|
-
type ${resourceName} implements Node {
|
21
|
-
${resolverKey}: String @${resolverKey}
|
22
|
-
}
|
23
|
-
`);
|
24
|
-
};
|
@@ -1,42 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
4
|
-
value: true
|
5
|
-
});
|
6
|
-
exports.default = void 0;
|
7
|
-
|
8
|
-
var _q3UiLocale = require("q3-ui-locale");
|
9
|
-
|
10
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
11
|
-
|
12
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
13
|
-
|
14
|
-
const registeri18ResourceBundles = contentData => {
|
15
|
-
if (!contentData || !('en' in contentData)) return;
|
16
|
-
Object.entries(contentData).forEach(([key, bundle]) => {
|
17
|
-
Object.entries(bundle).forEach(([namespace, data]) => {
|
18
|
-
_q3UiLocale.i18n.addResourceBundle(key, namespace, data, true, true);
|
19
|
-
});
|
20
|
-
});
|
21
|
-
};
|
22
|
-
|
23
|
-
const LocaleBundles = ({
|
24
|
-
children,
|
25
|
-
locale
|
26
|
-
}) => {
|
27
|
-
registeri18ResourceBundles(locale);
|
28
|
-
return children;
|
29
|
-
};
|
30
|
-
|
31
|
-
LocaleBundles.defaultProps = {
|
32
|
-
children: null,
|
33
|
-
locale: {}
|
34
|
-
};
|
35
|
-
LocaleBundles.propTypes = {
|
36
|
-
// eslint-disable-next-line
|
37
|
-
children: _propTypes.default.any,
|
38
|
-
// eslint-disable-next-line
|
39
|
-
locale: _propTypes.default.object
|
40
|
-
};
|
41
|
-
var _default = LocaleBundles;
|
42
|
-
exports.default = _default;
|
@@ -1,31 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
4
|
-
value: true
|
5
|
-
});
|
6
|
-
exports.default = void 0;
|
7
|
-
|
8
|
-
var _react = _interopRequireDefault(require("react"));
|
9
|
-
|
10
|
-
var _q3UiLocale = require("q3-ui-locale");
|
11
|
-
|
12
|
-
var _q3UiPermissions = require("q3-ui-permissions");
|
13
|
-
|
14
|
-
var _q3UiRest = require("q3-ui-rest");
|
15
|
-
|
16
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
17
|
-
|
18
|
-
const useLocale = () => {
|
19
|
-
var _React$useContext, _React$useContext$sta;
|
20
|
-
|
21
|
-
const profile = (_React$useContext = _react.default.useContext(_q3UiPermissions.AuthContext)) === null || _React$useContext === void 0 ? void 0 : (_React$useContext$sta = _React$useContext.state) === null || _React$useContext$sta === void 0 ? void 0 : _React$useContext$sta.profile;
|
22
|
-
const lng = profile === null || profile === void 0 ? void 0 : profile.lang;
|
23
|
-
(0, _q3UiRest.useTimezoneInterceptor)(profile === null || profile === void 0 ? void 0 : profile.timezone);
|
24
|
-
|
25
|
-
_react.default.useEffect(() => {
|
26
|
-
if (lng && _q3UiLocale.i18n.resolvedLanguage) _q3UiLocale.i18n.changeLanguage(lng);
|
27
|
-
}, [lng]);
|
28
|
-
};
|
29
|
-
|
30
|
-
var _default = useLocale;
|
31
|
-
exports.default = _default;
|
@@ -1,37 +0,0 @@
|
|
1
|
-
import { i18n } from 'q3-ui-locale';
|
2
|
-
import PropTypes from 'prop-types';
|
3
|
-
|
4
|
-
const registeri18ResourceBundles = (contentData) => {
|
5
|
-
if (!contentData || !('en' in contentData)) return;
|
6
|
-
|
7
|
-
Object.entries(contentData).forEach(([key, bundle]) => {
|
8
|
-
Object.entries(bundle).forEach(([namespace, data]) => {
|
9
|
-
i18n.addResourceBundle(
|
10
|
-
key,
|
11
|
-
namespace,
|
12
|
-
data,
|
13
|
-
true,
|
14
|
-
true,
|
15
|
-
);
|
16
|
-
});
|
17
|
-
});
|
18
|
-
};
|
19
|
-
|
20
|
-
const LocaleBundles = ({ children, locale }) => {
|
21
|
-
registeri18ResourceBundles(locale);
|
22
|
-
return children;
|
23
|
-
};
|
24
|
-
|
25
|
-
LocaleBundles.defaultProps = {
|
26
|
-
children: null,
|
27
|
-
locale: {},
|
28
|
-
};
|
29
|
-
|
30
|
-
LocaleBundles.propTypes = {
|
31
|
-
// eslint-disable-next-line
|
32
|
-
children: PropTypes.any,
|
33
|
-
// eslint-disable-next-line
|
34
|
-
locale: PropTypes.object,
|
35
|
-
};
|
36
|
-
|
37
|
-
export default LocaleBundles;
|
@@ -1,20 +0,0 @@
|
|
1
|
-
import React from 'react';
|
2
|
-
import { i18n } from 'q3-ui-locale';
|
3
|
-
import { AuthContext } from 'q3-ui-permissions';
|
4
|
-
import { useTimezoneInterceptor } from 'q3-ui-rest';
|
5
|
-
|
6
|
-
const useLocale = () => {
|
7
|
-
const profile =
|
8
|
-
React.useContext(AuthContext)?.state?.profile;
|
9
|
-
|
10
|
-
const lng = profile?.lang;
|
11
|
-
|
12
|
-
useTimezoneInterceptor(profile?.timezone);
|
13
|
-
|
14
|
-
React.useEffect(() => {
|
15
|
-
if (lng && i18n.resolvedLanguage)
|
16
|
-
i18n.changeLanguage(lng);
|
17
|
-
}, [lng]);
|
18
|
-
};
|
19
|
-
|
20
|
-
export default useLocale;
|