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;
         |