├── tools ├── schematics │ └── .gitkeep └── tsconfig.tools.json ├── apps ├── tools-initiative │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ ├── environments │ │ │ ├── environment.prod.ts │ │ │ └── environment.ts │ │ ├── favicon.ico │ │ ├── polyfills.ts │ │ ├── main.tsx │ │ ├── index.html │ │ └── app │ │ │ ├── star.svg │ │ │ ├── app.spec.tsx │ │ │ ├── logo.svg │ │ │ └── app.tsx │ ├── e2e │ │ ├── support │ │ │ ├── app.po.ts │ │ │ ├── index.ts │ │ │ └── commands.ts │ │ ├── fixtures │ │ │ └── example.json │ │ ├── .eslintrc │ │ ├── tsconfig.json │ │ ├── cypress.json │ │ ├── integration │ │ │ └── app.spec.ts │ │ └── plugins │ │ │ └── index.js │ ├── .babelrc │ ├── tsconfig.e2e.json │ ├── tsconfig.app.json │ ├── tsconfig.spec.json │ ├── browserslist │ ├── jest.config.js │ ├── tsconfig.json │ └── .eslintrc ├── initiative-management │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ ├── app │ │ │ ├── components │ │ │ │ └── user-nav-menu │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── user-nav-menu.spec.tsx │ │ │ │ │ └── user-nav-menu.tsx │ │ │ ├── app.spec.tsx │ │ │ └── app.tsx │ │ ├── environments │ │ │ ├── environment.prod.ts │ │ │ └── environment.ts │ │ ├── favicon.ico │ │ ├── polyfills.ts │ │ ├── index.html │ │ └── main.tsx │ ├── .babelrc │ ├── e2e │ │ ├── support │ │ │ ├── app.po.ts │ │ │ ├── index.ts │ │ │ └── commands.ts │ │ ├── fixtures │ │ │ └── example.json │ │ ├── .eslintrc │ │ ├── tsconfig.json │ │ ├── cypress.json │ │ ├── integration │ │ │ └── app.spec.ts │ │ └── plugins │ │ │ └── index.js │ ├── tsconfig.e2e.json │ ├── tsconfig.app.json │ ├── tsconfig.spec.json │ ├── browserslist │ ├── jest.config.js │ ├── tsconfig.json │ ├── README.md │ └── .eslintrc ├── outreach-initiative │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ ├── environments │ │ │ ├── environment.prod.ts │ │ │ └── environment.ts │ │ ├── favicon.ico │ │ ├── polyfills.ts │ │ ├── main.tsx │ │ ├── index.html │ │ └── app │ │ │ ├── star.svg │ │ │ ├── app.spec.tsx │ │ │ ├── logo.svg │ │ │ └── app.tsx │ ├── e2e │ │ ├── support │ │ │ ├── app.po.ts │ │ │ ├── index.ts │ │ │ └── commands.ts │ │ ├── fixtures │ │ │ └── example.json │ │ ├── .eslintrc │ │ ├── tsconfig.json │ │ ├── cypress.json │ │ ├── integration │ │ │ └── app.spec.ts │ │ └── plugins │ │ │ └── index.js │ ├── .babelrc │ ├── tsconfig.e2e.json │ ├── tsconfig.app.json │ ├── tsconfig.spec.json │ ├── browserslist │ ├── jest.config.js │ ├── tsconfig.json │ └── .eslintrc └── training-initiative │ ├── src │ ├── assets │ │ └── .gitkeep │ ├── environments │ │ ├── environment.prod.ts │ │ └── environment.ts │ ├── favicon.ico │ ├── polyfills.ts │ ├── main.tsx │ ├── index.html │ └── app │ │ ├── star.svg │ │ ├── app.spec.tsx │ │ ├── logo.svg │ │ └── app.tsx │ ├── e2e │ ├── support │ │ ├── app.po.ts │ │ ├── index.ts │ │ └── commands.ts │ ├── fixtures │ │ └── example.json │ ├── .eslintrc │ ├── tsconfig.json │ ├── cypress.json │ ├── integration │ │ └── app.spec.ts │ └── plugins │ │ └── index.js │ ├── .babelrc │ ├── tsconfig.e2e.json │ ├── tsconfig.app.json │ ├── tsconfig.spec.json │ ├── browserslist │ ├── jest.config.js │ ├── tsconfig.json │ └── .eslintrc ├── libs ├── store │ ├── people │ │ ├── src │ │ │ ├── lib │ │ │ │ └── store-people.ts │ │ │ └── index.ts │ │ ├── .eslintrc │ │ ├── tsconfig.json │ │ ├── README.md │ │ ├── tsconfig.lib.json │ │ ├── tsconfig.spec.json │ │ └── jest.config.js │ ├── tasks │ │ ├── src │ │ │ ├── lib │ │ │ │ └── store-tasks.ts │ │ │ └── index.ts │ │ ├── .eslintrc │ │ ├── tsconfig.json │ │ ├── README.md │ │ ├── tsconfig.lib.json │ │ ├── tsconfig.spec.json │ │ └── jest.config.js │ ├── accounts │ │ ├── src │ │ │ ├── lib │ │ │ │ └── store-accounts.ts │ │ │ └── index.ts │ │ ├── .eslintrc │ │ ├── tsconfig.json │ │ ├── README.md │ │ ├── tsconfig.lib.json │ │ ├── tsconfig.spec.json │ │ └── jest.config.js │ ├── core │ │ ├── src │ │ │ ├── index.ts │ │ │ └── lib │ │ │ │ ├── reducers.ts │ │ │ │ ├── epics.ts │ │ │ │ └── store.ts │ │ ├── .eslintrc │ │ ├── tsconfig.json │ │ ├── README.md │ │ ├── tsconfig.lib.json │ │ ├── tsconfig.spec.json │ │ └── jest.config.js │ └── projects │ │ ├── src │ │ ├── index.ts │ │ └── lib │ │ │ ├── store-projects.spec.ts │ │ │ └── store-projects.ts │ │ ├── .eslintrc │ │ ├── tsconfig.json │ │ ├── README.md │ │ ├── tsconfig.lib.json │ │ ├── tsconfig.spec.json │ │ └── jest.config.js ├── services │ ├── people │ │ ├── src │ │ │ ├── lib │ │ │ │ └── services-people.ts │ │ │ └── index.ts │ │ ├── .eslintrc │ │ ├── tsconfig.json │ │ ├── README.md │ │ ├── tsconfig.lib.json │ │ ├── tsconfig.spec.json │ │ └── jest.config.js │ ├── tasks │ │ ├── src │ │ │ ├── lib │ │ │ │ └── services-tasks.ts │ │ │ └── index.ts │ │ ├── .eslintrc │ │ ├── tsconfig.json │ │ ├── README.md │ │ ├── tsconfig.lib.json │ │ ├── tsconfig.spec.json │ │ └── jest.config.js │ ├── accounts │ │ ├── src │ │ │ ├── lib │ │ │ │ └── services-accounts.ts │ │ │ └── index.ts │ │ ├── .eslintrc │ │ ├── tsconfig.json │ │ ├── README.md │ │ ├── tsconfig.lib.json │ │ ├── tsconfig.spec.json │ │ └── jest.config.js │ └── projects │ │ ├── src │ │ ├── lib │ │ │ └── services-projects.ts │ │ └── index.ts │ │ ├── .eslintrc │ │ ├── tsconfig.json │ │ ├── README.md │ │ ├── tsconfig.lib.json │ │ ├── tsconfig.spec.json │ │ └── jest.config.js ├── design-system │ ├── .storybook │ │ ├── addons.js │ │ ├── preview-head.html │ │ ├── config.js │ │ ├── tsconfig.json │ │ └── webpack.config.js │ ├── src │ │ ├── components │ │ │ ├── app-bar │ │ │ │ ├── index.ts │ │ │ │ ├── app-bar.spec.tsx │ │ │ │ ├── app-bar.stories.tsx │ │ │ │ └── app-bar.tsx │ │ │ └── navigation-menu │ │ │ │ ├── index.ts │ │ │ │ ├── navigation-menu.spec.tsx │ │ │ │ ├── navigation-menu.stories.tsx │ │ │ │ └── navigation-menu.tsx │ │ └── index.ts │ ├── package.json │ ├── e2e │ │ ├── fixtures │ │ │ └── example.json │ │ ├── .eslintrc │ │ ├── tsconfig.json │ │ ├── integration │ │ │ ├── app-bar.spec.ts │ │ │ └── navigation-menu.spec.ts │ │ ├── cypress.json │ │ ├── support │ │ │ ├── index.ts │ │ │ └── commands.ts │ │ └── plugins │ │ │ └── index.js │ ├── .babelrc │ ├── tsconfig.e2e.json │ ├── tsconfig.spec.json │ ├── jest.config.js │ ├── README.md │ ├── tsconfig.lib.json │ ├── tsconfig.json │ └── .eslintrc ├── providers │ └── projects │ │ ├── src │ │ ├── index.ts │ │ └── lib │ │ │ ├── providers-projects.spec.tsx │ │ │ └── providers-projects.tsx │ │ ├── .babelrc │ │ ├── README.md │ │ ├── tsconfig.lib.json │ │ ├── tsconfig.spec.json │ │ ├── jest.config.js │ │ ├── tsconfig.json │ │ └── .eslintrc └── domain-types │ ├── src │ ├── lib │ │ ├── person.ts │ │ ├── initiative.ts │ │ ├── project.ts │ │ └── account.ts │ └── index.ts │ ├── tslint.json │ ├── tsconfig.json │ ├── README.md │ ├── tsconfig.lib.json │ ├── tsconfig.spec.json │ └── jest.config.js ├── .prettierrc ├── .storybook ├── addons.js ├── tsconfig.json └── webpack.config.js ├── babel.config.json ├── .prettierignore ├── .editorconfig ├── jest.preset.js ├── .gitignore ├── jest.config.js ├── .eslintrc ├── tsconfig.json ├── nx.json ├── tslint.json ├── README.md └── package.json /tools/schematics/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/tools-initiative/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /libs/store/people/src/lib/store-people.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /libs/store/tasks/src/lib/store-tasks.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/initiative-management/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/outreach-initiative/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/training-initiative/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /libs/services/people/src/lib/services-people.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /libs/services/tasks/src/lib/services-tasks.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /libs/store/accounts/src/lib/store-accounts.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true 3 | } 4 | -------------------------------------------------------------------------------- /libs/services/accounts/src/lib/services-accounts.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /libs/services/projects/src/lib/services-projects.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /libs/store/core/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/store'; 2 | -------------------------------------------------------------------------------- /.storybook/addons.js: -------------------------------------------------------------------------------- 1 | import '@storybook/addon-knobs/register'; 2 | -------------------------------------------------------------------------------- /libs/store/tasks/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/store-tasks'; 2 | -------------------------------------------------------------------------------- /libs/store/people/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/store-people'; 2 | -------------------------------------------------------------------------------- /libs/services/people/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/services-people'; 2 | -------------------------------------------------------------------------------- /libs/services/tasks/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/services-tasks'; 2 | -------------------------------------------------------------------------------- /libs/store/accounts/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/store-accounts'; 2 | -------------------------------------------------------------------------------- /libs/store/projects/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/store-projects'; 2 | -------------------------------------------------------------------------------- /libs/design-system/.storybook/addons.js: -------------------------------------------------------------------------------- 1 | import '../../../.storybook/addons'; 2 | -------------------------------------------------------------------------------- /libs/design-system/src/components/app-bar/index.ts: -------------------------------------------------------------------------------- 1 | export * from './app-bar'; 2 | -------------------------------------------------------------------------------- /libs/providers/projects/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/providers-projects'; 2 | -------------------------------------------------------------------------------- /libs/services/accounts/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/services-accounts'; 2 | -------------------------------------------------------------------------------- /libs/services/projects/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/services-projects'; 2 | -------------------------------------------------------------------------------- /libs/design-system/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@enterprise/design-system" 3 | } 4 | -------------------------------------------------------------------------------- /apps/outreach-initiative/e2e/support/app.po.ts: -------------------------------------------------------------------------------- 1 | export const getGreeting = () => cy.get('h1'); 2 | -------------------------------------------------------------------------------- /apps/tools-initiative/e2e/support/app.po.ts: -------------------------------------------------------------------------------- 1 | export const getGreeting = () => cy.get('h1'); 2 | -------------------------------------------------------------------------------- /apps/training-initiative/e2e/support/app.po.ts: -------------------------------------------------------------------------------- 1 | export const getGreeting = () => cy.get('h1'); 2 | -------------------------------------------------------------------------------- /babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@nrwl/web/babel"], 3 | "babelrcRoots": ["*"] 4 | } 5 | -------------------------------------------------------------------------------- /libs/design-system/src/components/navigation-menu/index.ts: -------------------------------------------------------------------------------- 1 | export * from './navigation-menu'; 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Add files here to ignore them from prettier formatting 2 | 3 | /dist 4 | /coverage 5 | -------------------------------------------------------------------------------- /apps/initiative-management/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@nrwl/react/babel"], 3 | "plugins": [] 4 | } 5 | -------------------------------------------------------------------------------- /apps/initiative-management/src/app/components/user-nav-menu/index.ts: -------------------------------------------------------------------------------- 1 | export * from './user-nav-menu'; 2 | -------------------------------------------------------------------------------- /libs/providers/projects/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@nrwl/react/babel"], 3 | "plugins": [] 4 | } 5 | -------------------------------------------------------------------------------- /libs/store/core/.eslintrc: -------------------------------------------------------------------------------- 1 | { "extends": "../../.eslintrc", "rules": {}, "ignorePatterns": ["!**/*"] } 2 | -------------------------------------------------------------------------------- /libs/store/tasks/.eslintrc: -------------------------------------------------------------------------------- 1 | { "extends": "../../../.eslintrc", "rules": {}, "ignorePatterns": ["!**/*"] } 2 | -------------------------------------------------------------------------------- /apps/initiative-management/e2e/support/app.po.ts: -------------------------------------------------------------------------------- 1 | export const getHeader = () => cy.get('#root > header h6'); 2 | -------------------------------------------------------------------------------- /libs/services/people/.eslintrc: -------------------------------------------------------------------------------- 1 | { "extends": "../../../.eslintrc", "rules": {}, "ignorePatterns": ["!**/*"] } 2 | -------------------------------------------------------------------------------- /libs/services/tasks/.eslintrc: -------------------------------------------------------------------------------- 1 | { "extends": "../../../.eslintrc", "rules": {}, "ignorePatterns": ["!**/*"] } 2 | -------------------------------------------------------------------------------- /libs/store/accounts/.eslintrc: -------------------------------------------------------------------------------- 1 | { "extends": "../../../.eslintrc", "rules": {}, "ignorePatterns": ["!**/*"] } 2 | -------------------------------------------------------------------------------- /libs/store/people/.eslintrc: -------------------------------------------------------------------------------- 1 | { "extends": "../../../.eslintrc", "rules": {}, "ignorePatterns": ["!**/*"] } 2 | -------------------------------------------------------------------------------- /libs/store/projects/.eslintrc: -------------------------------------------------------------------------------- 1 | { "extends": "../../../.eslintrc", "rules": {}, "ignorePatterns": ["!**/*"] } 2 | -------------------------------------------------------------------------------- /libs/services/accounts/.eslintrc: -------------------------------------------------------------------------------- 1 | { "extends": "../../../.eslintrc", "rules": {}, "ignorePatterns": ["!**/*"] } 2 | -------------------------------------------------------------------------------- /libs/services/projects/.eslintrc: -------------------------------------------------------------------------------- 1 | { "extends": "../../../.eslintrc", "rules": {}, "ignorePatterns": ["!**/*"] } 2 | -------------------------------------------------------------------------------- /apps/tools-initiative/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true, 3 | }; 4 | -------------------------------------------------------------------------------- /libs/design-system/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './components/app-bar'; 2 | export * from './components/navigation-menu'; 3 | -------------------------------------------------------------------------------- /.storybook/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "exclude": ["../**/test.ts", "../**/*.spec.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /apps/initiative-management/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true 3 | }; 4 | -------------------------------------------------------------------------------- /apps/outreach-initiative/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true, 3 | }; 4 | -------------------------------------------------------------------------------- /apps/training-initiative/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true, 3 | }; 4 | -------------------------------------------------------------------------------- /apps/tools-initiative/e2e/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io" 4 | } 5 | -------------------------------------------------------------------------------- /apps/tools-initiative/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BigAB/enterprise-react-example/HEAD/apps/tools-initiative/src/favicon.ico -------------------------------------------------------------------------------- /libs/design-system/e2e/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io" 4 | } 5 | -------------------------------------------------------------------------------- /libs/domain-types/src/lib/person.ts: -------------------------------------------------------------------------------- 1 | export interface Person { 2 | id: string | number; 3 | name: string; 4 | nickname?: string; 5 | } 6 | -------------------------------------------------------------------------------- /apps/initiative-management/e2e/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io" 4 | } 5 | -------------------------------------------------------------------------------- /apps/outreach-initiative/e2e/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io" 4 | } 5 | -------------------------------------------------------------------------------- /apps/outreach-initiative/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BigAB/enterprise-react-example/HEAD/apps/outreach-initiative/src/favicon.ico -------------------------------------------------------------------------------- /apps/training-initiative/e2e/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io" 4 | } 5 | -------------------------------------------------------------------------------- /apps/training-initiative/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BigAB/enterprise-react-example/HEAD/apps/training-initiative/src/favicon.ico -------------------------------------------------------------------------------- /libs/domain-types/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tslint.json", 3 | "linterOptions": { "exclude": ["!**/*"] }, 4 | "rules": {} 5 | } 6 | -------------------------------------------------------------------------------- /apps/initiative-management/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BigAB/enterprise-react-example/HEAD/apps/initiative-management/src/favicon.ico -------------------------------------------------------------------------------- /libs/domain-types/src/lib/initiative.ts: -------------------------------------------------------------------------------- 1 | export interface Initiative { 2 | id: string | number; 3 | name: string; 4 | description: string; 5 | } 6 | -------------------------------------------------------------------------------- /libs/design-system/e2e/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../../.eslintrc", "plugin:cypress/recommended"], 3 | "rules": {}, 4 | "ignorePatterns": ["!**/*"] 5 | } 6 | -------------------------------------------------------------------------------- /apps/tools-initiative/e2e/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../../.eslintrc", "plugin:cypress/recommended"], 3 | "rules": {}, 4 | "ignorePatterns": ["!**/*"] 5 | } 6 | -------------------------------------------------------------------------------- /libs/domain-types/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/account'; 2 | export * from './lib/initiative'; 3 | export * from './lib/person'; 4 | export * from './lib/project'; 5 | -------------------------------------------------------------------------------- /apps/initiative-management/e2e/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../../.eslintrc", "plugin:cypress/recommended"], 3 | "rules": {}, 4 | "ignorePatterns": ["!**/*"] 5 | } 6 | -------------------------------------------------------------------------------- /apps/outreach-initiative/e2e/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../../.eslintrc", "plugin:cypress/recommended"], 3 | "rules": {}, 4 | "ignorePatterns": ["!**/*"] 5 | } 6 | -------------------------------------------------------------------------------- /apps/training-initiative/e2e/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../../.eslintrc", "plugin:cypress/recommended"], 3 | "rules": {}, 4 | "ignorePatterns": ["!**/*"] 5 | } 6 | -------------------------------------------------------------------------------- /libs/design-system/.storybook/preview-head.html: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /libs/domain-types/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "types": ["node", "jest"] 5 | }, 6 | "include": ["**/*.ts"] 7 | } 8 | -------------------------------------------------------------------------------- /libs/store/core/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.json", 3 | "compilerOptions": { 4 | "types": ["node", "jest"] 5 | }, 6 | "include": ["**/*.ts"] 7 | } 8 | -------------------------------------------------------------------------------- /libs/domain-types/src/lib/project.ts: -------------------------------------------------------------------------------- 1 | export interface Project { 2 | id: string | number; 3 | name: string; 4 | description?: string; 5 | initiativeId?: string | number; 6 | } 7 | -------------------------------------------------------------------------------- /libs/services/people/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.json", 3 | "compilerOptions": { 4 | "types": ["node", "jest"] 5 | }, 6 | "include": ["**/*.ts"] 7 | } 8 | -------------------------------------------------------------------------------- /libs/services/tasks/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.json", 3 | "compilerOptions": { 4 | "types": ["node", "jest"] 5 | }, 6 | "include": ["**/*.ts"] 7 | } 8 | -------------------------------------------------------------------------------- /libs/store/accounts/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.json", 3 | "compilerOptions": { 4 | "types": ["node", "jest"] 5 | }, 6 | "include": ["**/*.ts"] 7 | } 8 | -------------------------------------------------------------------------------- /libs/store/people/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.json", 3 | "compilerOptions": { 4 | "types": ["node", "jest"] 5 | }, 6 | "include": ["**/*.ts"] 7 | } 8 | -------------------------------------------------------------------------------- /libs/store/projects/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.json", 3 | "compilerOptions": { 4 | "types": ["node", "jest"] 5 | }, 6 | "include": ["**/*.ts"] 7 | } 8 | -------------------------------------------------------------------------------- /libs/store/tasks/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.json", 3 | "compilerOptions": { 4 | "types": ["node", "jest"] 5 | }, 6 | "include": ["**/*.ts"] 7 | } 8 | -------------------------------------------------------------------------------- /libs/domain-types/src/lib/account.ts: -------------------------------------------------------------------------------- 1 | import { Person } from './person'; 2 | 3 | export interface UserAccount { 4 | id: string | number; 5 | user: Person; 6 | emails?: string[]; 7 | } 8 | -------------------------------------------------------------------------------- /libs/services/accounts/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.json", 3 | "compilerOptions": { 4 | "types": ["node", "jest"] 5 | }, 6 | "include": ["**/*.ts"] 7 | } 8 | -------------------------------------------------------------------------------- /libs/services/projects/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.json", 3 | "compilerOptions": { 4 | "types": ["node", "jest"] 5 | }, 6 | "include": ["**/*.ts"] 7 | } 8 | -------------------------------------------------------------------------------- /libs/store/core/README.md: -------------------------------------------------------------------------------- 1 | # store 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `ng test store` to execute the unit tests via [Jest](https://jestjs.io). 8 | -------------------------------------------------------------------------------- /libs/domain-types/README.md: -------------------------------------------------------------------------------- 1 | # domain-types 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `ng test domain-types` to execute the unit tests via [Jest](https://jestjs.io). 8 | -------------------------------------------------------------------------------- /libs/store/people/README.md: -------------------------------------------------------------------------------- 1 | # store-people 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `ng test store-people` to execute the unit tests via [Jest](https://jestjs.io). 8 | -------------------------------------------------------------------------------- /libs/store/tasks/README.md: -------------------------------------------------------------------------------- 1 | # store-tasks 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `ng test store-tasks` to execute the unit tests via [Jest](https://jestjs.io). 8 | -------------------------------------------------------------------------------- /libs/services/people/README.md: -------------------------------------------------------------------------------- 1 | # services-people 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `ng test services-people` to execute the unit tests via [Jest](https://jestjs.io). 8 | -------------------------------------------------------------------------------- /libs/services/tasks/README.md: -------------------------------------------------------------------------------- 1 | # services-tasks 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `ng test services-tasks` to execute the unit tests via [Jest](https://jestjs.io). 8 | -------------------------------------------------------------------------------- /libs/store/accounts/README.md: -------------------------------------------------------------------------------- 1 | # store-accounts 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `ng test store-accounts` to execute the unit tests via [Jest](https://jestjs.io). 8 | -------------------------------------------------------------------------------- /libs/store/projects/README.md: -------------------------------------------------------------------------------- 1 | # store-projects 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `ng test store-projects` to execute the unit tests via [Jest](https://jestjs.io). 8 | -------------------------------------------------------------------------------- /apps/tools-initiative/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@nrwl/react/babel"], 3 | "plugins": [ 4 | [ 5 | "styled-components", 6 | { 7 | "pure": true, 8 | "ssr": true 9 | } 10 | ] 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /libs/design-system/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@nrwl/react/babel"], 3 | "plugins": [ 4 | [ 5 | "styled-components", 6 | { 7 | "pure": true, 8 | "ssr": true 9 | } 10 | ] 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /libs/services/accounts/README.md: -------------------------------------------------------------------------------- 1 | # services-accounts 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `ng test services-accounts` to execute the unit tests via [Jest](https://jestjs.io). 8 | -------------------------------------------------------------------------------- /libs/services/projects/README.md: -------------------------------------------------------------------------------- 1 | # services-projects 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `ng test services-projects` to execute the unit tests via [Jest](https://jestjs.io). 8 | -------------------------------------------------------------------------------- /apps/outreach-initiative/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@nrwl/react/babel"], 3 | "plugins": [ 4 | [ 5 | "styled-components", 6 | { 7 | "pure": true, 8 | "ssr": true 9 | } 10 | ] 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /apps/training-initiative/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@nrwl/react/babel"], 3 | "plugins": [ 4 | [ 5 | "styled-components", 6 | { 7 | "pure": true, 8 | "ssr": true 9 | } 10 | ] 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /libs/domain-types/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": [] 6 | }, 7 | "exclude": ["**/*.spec.ts"], 8 | "include": ["**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /libs/providers/projects/README.md: -------------------------------------------------------------------------------- 1 | # providers-projects 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test providers-projects` to execute the unit tests via [Jest](https://jestjs.io). 8 | -------------------------------------------------------------------------------- /libs/services/tasks/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "types": [] 6 | }, 7 | "exclude": ["**/*.spec.ts"], 8 | "include": ["**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /libs/store/accounts/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "types": [] 6 | }, 7 | "exclude": ["**/*.spec.ts"], 8 | "include": ["**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /libs/store/core/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "types": [] 6 | }, 7 | "exclude": ["**/*.spec.ts"], 8 | "include": ["**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /libs/store/people/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "types": [] 6 | }, 7 | "exclude": ["**/*.spec.ts"], 8 | "include": ["**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /libs/store/projects/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "types": [] 6 | }, 7 | "exclude": ["**/*.spec.ts"], 8 | "include": ["**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /libs/store/tasks/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "types": [] 6 | }, 7 | "exclude": ["**/*.spec.ts"], 8 | "include": ["**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /libs/services/accounts/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "types": [] 6 | }, 7 | "exclude": ["**/*.spec.ts"], 8 | "include": ["**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /libs/services/people/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "types": [] 6 | }, 7 | "exclude": ["**/*.spec.ts"], 8 | "include": ["**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /libs/services/projects/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "types": [] 6 | }, 7 | "exclude": ["**/*.spec.ts"], 8 | "include": ["**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /libs/store/core/src/lib/reducers.ts: -------------------------------------------------------------------------------- 1 | import { combineReducers } from '@reduxjs/toolkit'; 2 | import { projectsSlice } from '@enterprise/store/projects'; 3 | 4 | export const rootReducer = combineReducers({ 5 | [projectsSlice.name]: projectsSlice.reducer, 6 | }); 7 | -------------------------------------------------------------------------------- /libs/design-system/.storybook/config.js: -------------------------------------------------------------------------------- 1 | import { configure, addDecorator } from '@storybook/react'; 2 | import { withKnobs } from '@storybook/addon-knobs'; 3 | 4 | addDecorator(withKnobs); 5 | configure(require.context('../src', true, /\.stories\.tsx?$/), module); 6 | -------------------------------------------------------------------------------- /libs/design-system/e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "types": ["cypress", "node"] 6 | }, 7 | "include": ["**/*.ts", "**/*.js"], 8 | "exclude": ["plugins/index.js"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/outreach-initiative/e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "types": ["cypress", "node"] 6 | }, 7 | "include": ["**/*.ts", "**/*.js"], 8 | "exclude": ["plugins/index.js"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/tools-initiative/e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "types": ["cypress", "node"] 6 | }, 7 | "include": ["**/*.ts", "**/*.js"], 8 | "exclude": ["plugins/index.js"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/training-initiative/e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "types": ["cypress", "node"] 6 | }, 7 | "include": ["**/*.ts", "**/*.js"], 8 | "exclude": ["plugins/index.js"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/initiative-management/e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "types": ["cypress", "node"] 6 | }, 7 | "include": ["**/*.ts", "**/*.js"], 8 | "exclude": ["plugins/index.js"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/outreach-initiative/src/polyfills.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Polyfill stable language features. These imports will be optimized by `@babel/preset-env`. 3 | * 4 | * See: https://github.com/zloirock/core-js#babel 5 | */ 6 | import 'core-js/stable'; 7 | import 'regenerator-runtime/runtime'; 8 | -------------------------------------------------------------------------------- /apps/tools-initiative/src/polyfills.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Polyfill stable language features. These imports will be optimized by `@babel/preset-env`. 3 | * 4 | * See: https://github.com/zloirock/core-js#babel 5 | */ 6 | import 'core-js/stable'; 7 | import 'regenerator-runtime/runtime'; 8 | -------------------------------------------------------------------------------- /apps/training-initiative/src/polyfills.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Polyfill stable language features. These imports will be optimized by `@babel/preset-env`. 3 | * 4 | * See: https://github.com/zloirock/core-js#babel 5 | */ 6 | import 'core-js/stable'; 7 | import 'regenerator-runtime/runtime'; 8 | -------------------------------------------------------------------------------- /apps/initiative-management/src/polyfills.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Polyfill stable language features. These imports will be optimized by `@babel/preset-env`. 3 | * 4 | * See: https://github.com/zloirock/core-js#babel 5 | */ 6 | import 'core-js/stable'; 7 | import 'regenerator-runtime/runtime'; 8 | -------------------------------------------------------------------------------- /apps/outreach-initiative/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // This file can be replaced during build by using the `fileReplacements` array. 2 | // When building for production, this file is replaced with `environment.prod.ts`. 3 | 4 | export const environment = { 5 | production: false, 6 | }; 7 | -------------------------------------------------------------------------------- /apps/tools-initiative/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // This file can be replaced during build by using the `fileReplacements` array. 2 | // When building for production, this file is replaced with `environment.prod.ts`. 3 | 4 | export const environment = { 5 | production: false, 6 | }; 7 | -------------------------------------------------------------------------------- /apps/training-initiative/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // This file can be replaced during build by using the `fileReplacements` array. 2 | // When building for production, this file is replaced with `environment.prod.ts`. 3 | 4 | export const environment = { 5 | production: false, 6 | }; 7 | -------------------------------------------------------------------------------- /apps/initiative-management/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // This file can be replaced during build by using the `fileReplacements` array. 2 | // When building for production, this file is replaced with `environment.prod.ts`. 3 | 4 | export const environment = { 5 | production: false 6 | }; 7 | -------------------------------------------------------------------------------- /tools/tsconfig.tools.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../dist/out-tsc/tools", 5 | "rootDir": ".", 6 | "module": "commonjs", 7 | "target": "es5", 8 | "types": ["node"] 9 | }, 10 | "include": ["**/*.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /apps/tools-initiative/tsconfig.e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "sourceMap": false, 5 | "outDir": "../../dist/out-tsc", 6 | "allowJs": true, 7 | "types": ["cypress", "node"] 8 | }, 9 | "include": ["e2e/**/*.ts", "e2e/**/*.js"] 10 | } 11 | -------------------------------------------------------------------------------- /libs/design-system/e2e/integration/app-bar.spec.ts: -------------------------------------------------------------------------------- 1 | describe('design-system: AppBar component', () => { 2 | beforeEach(() => cy.visit('/iframe.html?id=appbar--primary')); 3 | 4 | it('should render the component', () => { 5 | cy.get('header').should('contain', 'Initiative Manager'); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /libs/design-system/tsconfig.e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "sourceMap": false, 5 | "outDir": "../../dist/out-tsc", 6 | "allowJs": true, 7 | "types": ["cypress", "node"] 8 | }, 9 | "include": ["e2e/**/*.ts", "e2e/**/*.js"] 10 | } 11 | -------------------------------------------------------------------------------- /apps/initiative-management/tsconfig.e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "sourceMap": false, 5 | "outDir": "../../dist/out-tsc", 6 | "allowJs": true, 7 | "types": ["cypress", "node"] 8 | }, 9 | "include": ["e2e/**/*.ts", "e2e/**/*.js"] 10 | } 11 | -------------------------------------------------------------------------------- /apps/outreach-initiative/tsconfig.e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "sourceMap": false, 5 | "outDir": "../../dist/out-tsc", 6 | "allowJs": true, 7 | "types": ["cypress", "node"] 8 | }, 9 | "include": ["e2e/**/*.ts", "e2e/**/*.js"] 10 | } 11 | -------------------------------------------------------------------------------- /apps/training-initiative/tsconfig.e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "sourceMap": false, 5 | "outDir": "../../dist/out-tsc", 6 | "allowJs": true, 7 | "types": ["cypress", "node"] 8 | }, 9 | "include": ["e2e/**/*.ts", "e2e/**/*.js"] 10 | } 11 | -------------------------------------------------------------------------------- /libs/design-system/e2e/integration/navigation-menu.spec.ts: -------------------------------------------------------------------------------- 1 | describe('design-system: Navigation Menu component', () => { 2 | beforeEach(() => cy.visit('/iframe.html?id=navigationmenu--primary')); 3 | 4 | it('should render the component', () => { 5 | cy.get('button').should('be.visible'); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /libs/providers/projects/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "types": ["node"] 6 | }, 7 | "exclude": ["**/*.spec.ts", "**/*.spec.tsx"], 8 | "include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"] 9 | } 10 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /apps/tools-initiative/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": ["node"] 6 | }, 7 | "exclude": ["**/*.spec.ts", "**/*.spec.tsx"], 8 | "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/initiative-management/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": ["node"] 6 | }, 7 | "exclude": ["**/*.spec.ts", "**/*.spec.tsx"], 8 | "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/outreach-initiative/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": ["node"] 6 | }, 7 | "exclude": ["**/*.spec.ts", "**/*.spec.tsx"], 8 | "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/training-initiative/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": ["node"] 6 | }, 7 | "exclude": ["**/*.spec.ts", "**/*.spec.tsx"], 8 | "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/tools-initiative/src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | 4 | import { BrowserRouter } from 'react-router-dom'; 5 | 6 | import App from './app/app'; 7 | 8 | ReactDOM.render( 9 | 10 | 11 | , 12 | document.getElementById('root') 13 | ); 14 | -------------------------------------------------------------------------------- /apps/outreach-initiative/src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | 4 | import { BrowserRouter } from 'react-router-dom'; 5 | 6 | import App from './app/app'; 7 | 8 | ReactDOM.render( 9 | 10 | 11 | , 12 | document.getElementById('root') 13 | ); 14 | -------------------------------------------------------------------------------- /apps/training-initiative/src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | 4 | import { BrowserRouter } from 'react-router-dom'; 5 | 6 | import App from './app/app'; 7 | 8 | ReactDOM.render( 9 | 10 | 11 | , 12 | document.getElementById('root') 13 | ); 14 | -------------------------------------------------------------------------------- /apps/initiative-management/src/app/app.spec.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render } from '@testing-library/react'; 3 | 4 | import App from './app'; 5 | 6 | describe('App', () => { 7 | it('should render successfully', () => { 8 | const { baseElement } = render(); 9 | 10 | expect(baseElement).toBeTruthy(); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /libs/design-system/.storybook/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "emitDecoratorMetadata": true 5 | }, 6 | "exclude": [ 7 | "../src/test.ts", 8 | "../**/*.spec.ts", 9 | "../**/*.spec.js", 10 | "../**/*.spec.tsx", 11 | "../**/*.spec.jsx" 12 | ], 13 | "include": ["../src/**/*"] 14 | } 15 | -------------------------------------------------------------------------------- /libs/domain-types/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "**/*.spec.ts", 10 | "**/*.spec.tsx", 11 | "**/*.spec.js", 12 | "**/*.spec.jsx", 13 | "**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /libs/store/core/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "**/*.spec.ts", 10 | "**/*.spec.tsx", 11 | "**/*.spec.js", 12 | "**/*.spec.jsx", 13 | "**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /libs/store/people/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "**/*.spec.ts", 10 | "**/*.spec.tsx", 11 | "**/*.spec.js", 12 | "**/*.spec.jsx", 13 | "**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /libs/store/tasks/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "**/*.spec.ts", 10 | "**/*.spec.tsx", 11 | "**/*.spec.js", 12 | "**/*.spec.jsx", 13 | "**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /apps/outreach-initiative/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "**/*.spec.ts", 10 | "**/*.spec.tsx", 11 | "**/*.spec.js", 12 | "**/*.spec.jsx", 13 | "**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /apps/tools-initiative/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "**/*.spec.ts", 10 | "**/*.spec.tsx", 11 | "**/*.spec.js", 12 | "**/*.spec.jsx", 13 | "**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /apps/training-initiative/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "**/*.spec.ts", 10 | "**/*.spec.tsx", 11 | "**/*.spec.js", 12 | "**/*.spec.jsx", 13 | "**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /libs/services/accounts/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "**/*.spec.ts", 10 | "**/*.spec.tsx", 11 | "**/*.spec.js", 12 | "**/*.spec.jsx", 13 | "**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /libs/services/people/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "**/*.spec.ts", 10 | "**/*.spec.tsx", 11 | "**/*.spec.js", 12 | "**/*.spec.jsx", 13 | "**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /libs/services/projects/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "**/*.spec.ts", 10 | "**/*.spec.tsx", 11 | "**/*.spec.js", 12 | "**/*.spec.jsx", 13 | "**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /libs/services/tasks/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "**/*.spec.ts", 10 | "**/*.spec.tsx", 11 | "**/*.spec.js", 12 | "**/*.spec.jsx", 13 | "**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /libs/store/accounts/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "**/*.spec.ts", 10 | "**/*.spec.tsx", 11 | "**/*.spec.js", 12 | "**/*.spec.jsx", 13 | "**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /libs/store/projects/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "**/*.spec.ts", 10 | "**/*.spec.tsx", 11 | "**/*.spec.js", 12 | "**/*.spec.jsx", 13 | "**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /apps/initiative-management/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "**/*.spec.ts", 10 | "**/*.spec.tsx", 11 | "**/*.spec.js", 12 | "**/*.spec.jsx", 13 | "**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /libs/design-system/src/components/app-bar/app-bar.spec.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render } from '@testing-library/react'; 3 | 4 | import { AppBar } from './app-bar'; 5 | 6 | describe(' AppBar', () => { 7 | it('should render successfully', () => { 8 | const { baseElement } = render(); 9 | expect(baseElement).toBeTruthy(); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /libs/providers/projects/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "**/*.spec.ts", 10 | "**/*.spec.tsx", 11 | "**/*.spec.js", 12 | "**/*.spec.jsx", 13 | "**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /libs/design-system/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "src/**/*.spec.ts", 10 | "src/**/*.spec.tsx", 11 | "src/**/*.spec.js", 12 | "src/**/*.spec.jsx", 13 | "src/**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /libs/domain-types/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: '../../jest.preset.js', 3 | transform: { 4 | '^.+\\.[tj]sx?$': 'ts-jest', 5 | }, 6 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'], 7 | coverageDirectory: '../../coverage/libs/domain-types', 8 | globals: { 'ts-jest': { tsConfig: '/tsconfig.spec.json' } }, 9 | displayName: 'domain-types', 10 | }; 11 | -------------------------------------------------------------------------------- /libs/store/core/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: '../../../jest.preset.js', 3 | transform: { 4 | '^.+\\.[tj]sx?$': 'ts-jest', 5 | }, 6 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'], 7 | coverageDirectory: '../../../coverage/libs/store/core', 8 | globals: { 'ts-jest': { tsConfig: '/tsconfig.spec.json' } }, 9 | displayName: 'store-core', 10 | }; 11 | -------------------------------------------------------------------------------- /libs/design-system/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: '../../jest.preset.js', 3 | transform: { 4 | '^.+\\.[tj]sx?$': 'ts-jest', 5 | }, 6 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'], 7 | coverageDirectory: '../../coverage/libs/design-system', 8 | globals: { 'ts-jest': { tsconfig: '/tsconfig.spec.json' } }, 9 | displayName: 'design-system', 10 | }; 11 | -------------------------------------------------------------------------------- /libs/store/people/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: '../../../jest.preset.js', 3 | transform: { 4 | '^.+\\.[tj]sx?$': 'ts-jest', 5 | }, 6 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'], 7 | coverageDirectory: '../../../coverage/libs/store/people', 8 | globals: { 'ts-jest': { tsConfig: '/tsconfig.spec.json' } }, 9 | displayName: 'store-people', 10 | }; 11 | -------------------------------------------------------------------------------- /libs/store/tasks/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: '../../../jest.preset.js', 3 | transform: { 4 | '^.+\\.[tj]sx?$': 'ts-jest', 5 | }, 6 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'], 7 | coverageDirectory: '../../../coverage/libs/store/tasks', 8 | globals: { 'ts-jest': { tsConfig: '/tsconfig.spec.json' } }, 9 | displayName: 'store-tasks', 10 | }; 11 | -------------------------------------------------------------------------------- /libs/services/people/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: '../../../jest.preset.js', 3 | transform: { 4 | '^.+\\.[tj]sx?$': 'ts-jest', 5 | }, 6 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'], 7 | coverageDirectory: '../../../coverage/libs/services/people', 8 | globals: { 'ts-jest': { tsConfig: '/tsconfig.spec.json' } }, 9 | displayName: 'services-people', 10 | }; 11 | -------------------------------------------------------------------------------- /libs/services/tasks/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: '../../../jest.preset.js', 3 | transform: { 4 | '^.+\\.[tj]sx?$': 'ts-jest', 5 | }, 6 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'], 7 | coverageDirectory: '../../../coverage/libs/services/tasks', 8 | globals: { 'ts-jest': { tsConfig: '/tsconfig.spec.json' } }, 9 | displayName: 'services-tasks', 10 | }; 11 | -------------------------------------------------------------------------------- /libs/store/accounts/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: '../../../jest.preset.js', 3 | transform: { 4 | '^.+\\.[tj]sx?$': 'ts-jest', 5 | }, 6 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'], 7 | coverageDirectory: '../../../coverage/libs/store/accounts', 8 | globals: { 'ts-jest': { tsConfig: '/tsconfig.spec.json' } }, 9 | displayName: 'store-accounts', 10 | }; 11 | -------------------------------------------------------------------------------- /libs/store/projects/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: '../../../jest.preset.js', 3 | transform: { 4 | '^.+\\.[tj]sx?$': 'ts-jest', 5 | }, 6 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'], 7 | coverageDirectory: '../../../coverage/libs/store/projects', 8 | globals: { 'ts-jest': { tsConfig: '/tsconfig.spec.json' } }, 9 | displayName: 'store-projects', 10 | }; 11 | -------------------------------------------------------------------------------- /libs/design-system/README.md: -------------------------------------------------------------------------------- 1 | # design-system 2 | 3 | This library holds all the UI components for the Enterprise organization. It is owned by the UI team and is the single-source-of-truth for current design patterns and specs. 4 | 5 | This library was generated with [Nx](https://nx.dev). 6 | 7 | ## Running unit tests 8 | 9 | Run `nx test design-system` to execute the unit tests via [Jest](https://jestjs.io). 10 | -------------------------------------------------------------------------------- /libs/services/accounts/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: '../../../jest.preset.js', 3 | transform: { 4 | '^.+\\.[tj]sx?$': 'ts-jest', 5 | }, 6 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'], 7 | coverageDirectory: '../../../coverage/libs/services/accounts', 8 | globals: { 'ts-jest': { tsConfig: '/tsconfig.spec.json' } }, 9 | displayName: 'services-accounts', 10 | }; 11 | -------------------------------------------------------------------------------- /libs/services/projects/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: '../../../jest.preset.js', 3 | transform: { 4 | '^.+\\.[tj]sx?$': 'ts-jest', 5 | }, 6 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'], 7 | coverageDirectory: '../../../coverage/libs/services/projects', 8 | globals: { 'ts-jest': { tsConfig: '/tsconfig.spec.json' } }, 9 | displayName: 'services-projects', 10 | }; 11 | -------------------------------------------------------------------------------- /apps/tools-initiative/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ToolsInitiative 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /libs/providers/projects/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: '../../../jest.preset.js', 3 | transform: { 4 | '^.+\\.[tj]sx?$': 'ts-jest', 5 | }, 6 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'], 7 | coverageDirectory: '../../../coverage/libs/providers/projects', 8 | globals: { 'ts-jest': { tsConfig: '/tsconfig.spec.json' } }, 9 | displayName: 'providers-projects', 10 | }; 11 | -------------------------------------------------------------------------------- /libs/providers/projects/src/lib/providers-projects.spec.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render } from '@testing-library/react'; 3 | 4 | import ProvidersProjects from './providers-projects'; 5 | 6 | describe(' ProvidersProjects', () => { 7 | it('should render successfully', () => { 8 | const { baseElement } = render(); 9 | expect(baseElement).toBeTruthy(); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /apps/outreach-initiative/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | OutreachInitiative 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /apps/tools-initiative/src/app/star.svg: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /apps/training-initiative/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | TrainingInitiative 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /apps/initiative-management/src/app/components/user-nav-menu/user-nav-menu.spec.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render } from '@testing-library/react'; 3 | 4 | import { UserNavMenu } from './user-nav-menu'; 5 | 6 | describe('UserNavMenu', () => { 7 | it('should render successfully', () => { 8 | const { baseElement } = render(); 9 | 10 | expect(baseElement).toBeTruthy(); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /apps/outreach-initiative/src/app/star.svg: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /apps/training-initiative/src/app/star.svg: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /jest.preset.js: -------------------------------------------------------------------------------- 1 | const nxPreset = require('@nrwl/jest/preset'); 2 | module.exports = { 3 | ...nxPreset, 4 | testMatch: ['**/+(*.)+(spec|test).+(ts|js)?(x)'], 5 | transform: { 6 | '^.+\\.(ts|js|html)$': 'ts-jest', 7 | }, 8 | resolver: '@nrwl/jest/plugins/resolver', 9 | moduleFileExtensions: ['ts', 'js', 'html'], 10 | coverageReporters: ['html'], 11 | testPathIgnorePatterns: ['/node_modules/', '/e2e/'], 12 | }; 13 | -------------------------------------------------------------------------------- /libs/design-system/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": ["node"] 6 | }, 7 | "exclude": [ 8 | "**/*.spec.ts", 9 | "**/*.spec.tsx", 10 | "**/*.stories.ts", 11 | "**/*.stories.js", 12 | "**/*.stories.jsx", 13 | "**/*.stories.tsx" 14 | ], 15 | "include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"] 16 | } 17 | -------------------------------------------------------------------------------- /libs/design-system/src/components/navigation-menu/navigation-menu.spec.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render } from '@testing-library/react'; 3 | 4 | import { NavigationMenu } from './navigation-menu'; 5 | 6 | describe(' NavigationMenu', () => { 7 | it('should render successfully', () => { 8 | const { baseElement } = render(Navigate); 9 | expect(baseElement).toBeTruthy(); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /.storybook/webpack.config.js: -------------------------------------------------------------------------------- 1 | // Export a function. Accept the base config as the only param. 2 | module.exports = async ({ config, mode }) => { 3 | // `mode` has a value of 'DEVELOPMENT' or 'PRODUCTION' 4 | // You can change the configuration based on that. 5 | // 'PRODUCTION' is used when building the static version of storybook. 6 | 7 | // Make whatever fine-grained changes you need 8 | 9 | // Return the altered config 10 | return config; 11 | }; 12 | -------------------------------------------------------------------------------- /apps/tools-initiative/browserslist: -------------------------------------------------------------------------------- 1 | # This file is used by: 2 | # 1. autoprefixer to adjust CSS to support the below specified browsers 3 | # 2. babel preset-env to adjust included polyfills 4 | # 5 | # For additional information regarding the format and rule options, please see: 6 | # https://github.com/browserslist/browserslist#queries 7 | # 8 | # If you need to support different browsers in production, you may tweak the list below. 9 | 10 | > 0.2% 11 | not dead 12 | not op_mini all 13 | -------------------------------------------------------------------------------- /apps/tools-initiative/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: '../../jest.preset.js', 3 | transform: { 4 | '^(?!.*\\.(js|jsx|ts|tsx|css|json)$)': '@nrwl/react/plugins/jest', 5 | '^.+\\.[tj]sx?$': 'ts-jest', 6 | }, 7 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'], 8 | coverageDirectory: '../../coverage/apps/tools-initiative', 9 | globals: { 'ts-jest': { tsconfig: '/tsconfig.spec.json' } }, 10 | displayName: 'tools-initiative', 11 | }; 12 | -------------------------------------------------------------------------------- /apps/initiative-management/browserslist: -------------------------------------------------------------------------------- 1 | # This file is used by: 2 | # 1. autoprefixer to adjust CSS to support the below specified browsers 3 | # 2. babel preset-env to adjust included polyfills 4 | # 5 | # For additional information regarding the format and rule options, please see: 6 | # https://github.com/browserslist/browserslist#queries 7 | # 8 | # If you need to support different browsers in production, you may tweak the list below. 9 | 10 | > 0.2% 11 | not dead 12 | not op_mini all 13 | -------------------------------------------------------------------------------- /apps/outreach-initiative/browserslist: -------------------------------------------------------------------------------- 1 | # This file is used by: 2 | # 1. autoprefixer to adjust CSS to support the below specified browsers 3 | # 2. babel preset-env to adjust included polyfills 4 | # 5 | # For additional information regarding the format and rule options, please see: 6 | # https://github.com/browserslist/browserslist#queries 7 | # 8 | # If you need to support different browsers in production, you may tweak the list below. 9 | 10 | > 0.2% 11 | not dead 12 | not op_mini all 13 | -------------------------------------------------------------------------------- /apps/training-initiative/browserslist: -------------------------------------------------------------------------------- 1 | # This file is used by: 2 | # 1. autoprefixer to adjust CSS to support the below specified browsers 3 | # 2. babel preset-env to adjust included polyfills 4 | # 5 | # For additional information regarding the format and rule options, please see: 6 | # https://github.com/browserslist/browserslist#queries 7 | # 8 | # If you need to support different browsers in production, you may tweak the list below. 9 | 10 | > 0.2% 11 | not dead 12 | not op_mini all 13 | -------------------------------------------------------------------------------- /apps/initiative-management/src/app/app.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { AppBar } from '@enterprise/design-system'; 3 | import { UserNavMenu } from './components/user-nav-menu'; 4 | 5 | export const App = () => { 6 | return ( 7 | <> 8 | 9 | 12 | 13 | 14 | ); 15 | }; 16 | 17 | export default App; 18 | -------------------------------------------------------------------------------- /apps/outreach-initiative/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: '../../jest.preset.js', 3 | transform: { 4 | '^(?!.*\\.(js|jsx|ts|tsx|css|json)$)': '@nrwl/react/plugins/jest', 5 | '^.+\\.[tj]sx?$': 'ts-jest', 6 | }, 7 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'], 8 | coverageDirectory: '../../coverage/apps/outreach-initiative', 9 | globals: { 'ts-jest': { tsconfig: '/tsconfig.spec.json' } }, 10 | displayName: 'outreach-initiative', 11 | }; 12 | -------------------------------------------------------------------------------- /apps/training-initiative/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: '../../jest.preset.js', 3 | transform: { 4 | '^(?!.*\\.(js|jsx|ts|tsx|css|json)$)': '@nrwl/react/plugins/jest', 5 | '^.+\\.[tj]sx?$': 'ts-jest', 6 | }, 7 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'], 8 | coverageDirectory: '../../coverage/apps/training-initiative', 9 | globals: { 'ts-jest': { tsconfig: '/tsconfig.spec.json' } }, 10 | displayName: 'training-initiative', 11 | }; 12 | -------------------------------------------------------------------------------- /apps/initiative-management/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: '../../jest.preset.js', 3 | transform: { 4 | '^(?!.*\\.(js|jsx|ts|tsx|css|json)$)': '@nrwl/react/plugins/jest', 5 | '^.+\\.[tj]sx?$': 'ts-jest', 6 | }, 7 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'html'], 8 | coverageDirectory: '../../coverage/apps/initiative-management', 9 | globals: { 'ts-jest': { tsConfig: '/tsconfig.spec.json' } }, 10 | displayName: 'initiative-management', 11 | }; 12 | -------------------------------------------------------------------------------- /apps/tools-initiative/e2e/cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "fileServerFolder": ".", 3 | "fixturesFolder": "./fixtures", 4 | "integrationFolder": "./integration", 5 | "modifyObstructiveCode": false, 6 | "pluginsFile": "./plugins/index", 7 | "supportFile": "./support/index.ts", 8 | "video": true, 9 | "videosFolder": "../../../dist/cypress/apps/tools-initiative/e2e/videos", 10 | "screenshotsFolder": "../../../dist/cypress/apps/tools-initiative/e2e/screenshots", 11 | "chromeWebSecurity": false 12 | } 13 | -------------------------------------------------------------------------------- /apps/outreach-initiative/e2e/cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "fileServerFolder": ".", 3 | "fixturesFolder": "./fixtures", 4 | "integrationFolder": "./integration", 5 | "modifyObstructiveCode": false, 6 | "pluginsFile": "./plugins/index", 7 | "supportFile": "./support/index.ts", 8 | "video": true, 9 | "videosFolder": "../../../dist/cypress/apps/outreach-initiative/e2e/videos", 10 | "screenshotsFolder": "../../../dist/cypress/apps/outreach-initiative/e2e/screenshots", 11 | "chromeWebSecurity": false 12 | } 13 | -------------------------------------------------------------------------------- /apps/training-initiative/e2e/cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "fileServerFolder": ".", 3 | "fixturesFolder": "./fixtures", 4 | "integrationFolder": "./integration", 5 | "modifyObstructiveCode": false, 6 | "pluginsFile": "./plugins/index", 7 | "supportFile": "./support/index.ts", 8 | "video": true, 9 | "videosFolder": "../../../dist/cypress/apps/training-initiative/e2e/videos", 10 | "screenshotsFolder": "../../../dist/cypress/apps/training-initiative/e2e/screenshots", 11 | "chromeWebSecurity": false 12 | } 13 | -------------------------------------------------------------------------------- /apps/initiative-management/e2e/cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "fileServerFolder": ".", 3 | "fixturesFolder": "./fixtures", 4 | "integrationFolder": "./integration", 5 | "modifyObstructiveCode": false, 6 | "pluginsFile": "./plugins/index", 7 | "supportFile": "./support/index.ts", 8 | "video": true, 9 | "videosFolder": "../../../dist/cypress/apps/initiative-management/e2e/videos", 10 | "screenshotsFolder": "../../../dist/cypress/apps/initiative-management/e2e/screenshots", 11 | "chromeWebSecurity": false 12 | } 13 | -------------------------------------------------------------------------------- /apps/initiative-management/e2e/integration/app.spec.ts: -------------------------------------------------------------------------------- 1 | import { getHeader } from '../support/app.po'; 2 | 3 | describe('initiative-management', () => { 4 | beforeEach(() => cy.visit('/')); 5 | 6 | it('should display the Company Header', () => { 7 | // Custom command example, see `../support/commands.ts` file 8 | cy.login('my-email@something.com', 'myPassword'); 9 | 10 | // Function helper example, see `../support/app.po.ts` file 11 | getHeader().contains('Initiative Manager'); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /apps/tools-initiative/e2e/integration/app.spec.ts: -------------------------------------------------------------------------------- 1 | import { getGreeting } from '../support/app.po'; 2 | 3 | describe('tools-initiative', () => { 4 | beforeEach(() => cy.visit('/')); 5 | 6 | it('should display welcome message', () => { 7 | // Custom command example, see `../support/commands.ts` file 8 | cy.login('my-email@something.com', 'myPassword'); 9 | 10 | // Function helper example, see `../support/app.po.ts` file 11 | getGreeting().contains('Welcome to tools-initiative!'); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /apps/outreach-initiative/e2e/integration/app.spec.ts: -------------------------------------------------------------------------------- 1 | import { getGreeting } from '../support/app.po'; 2 | 3 | describe('outreach-initiative', () => { 4 | beforeEach(() => cy.visit('/')); 5 | 6 | it('should display welcome message', () => { 7 | // Custom command example, see `../support/commands.ts` file 8 | cy.login('my-email@something.com', 'myPassword'); 9 | 10 | // Function helper example, see `../support/app.po.ts` file 11 | getGreeting().contains('Welcome to outreach-initiative!'); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /apps/training-initiative/e2e/integration/app.spec.ts: -------------------------------------------------------------------------------- 1 | import { getGreeting } from '../support/app.po'; 2 | 3 | describe('training-initiative', () => { 4 | beforeEach(() => cy.visit('/')); 5 | 6 | it('should display welcome message', () => { 7 | // Custom command example, see `../support/commands.ts` file 8 | cy.login('my-email@something.com', 'myPassword'); 9 | 10 | // Function helper example, see `../support/app.po.ts` file 11 | getGreeting().contains('Welcome to training-initiative!'); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /libs/store/core/src/lib/epics.ts: -------------------------------------------------------------------------------- 1 | import { combineEpics, Epic } from 'redux-observable'; 2 | import { projectsEpic } from '@enterprise/store/projects'; 3 | import { catchError } from 'rxjs/operators'; 4 | 5 | const epics: Epic[] = [projectsEpic]; 6 | 7 | export const rootEpic = (action$, store$, dependencies) => 8 | combineEpics(...epics)(action$, store$, dependencies).pipe( 9 | catchError((error, source) => { 10 | console.error(error); 11 | return source; 12 | }) 13 | ); 14 | 15 | export default rootEpic; 16 | -------------------------------------------------------------------------------- /libs/design-system/e2e/cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "fileServerFolder": ".", 3 | "fixturesFolder": "./fixtures", 4 | "integrationFolder": "./integration", 5 | "modifyObstructiveCode": false, 6 | "pluginsFile": "./plugins/index", 7 | "supportFile": "./support/index.ts", 8 | "video": false, 9 | "videosFolder": "../../../dist/cypress/libs/design-system/e2e/videos", 10 | "screenshotsFolder": "../../../dist/cypress/libs/design-system/e2e/screenshots", 11 | "chromeWebSecurity": false, 12 | "baseUrl": "http://localhost:4400" 13 | } 14 | -------------------------------------------------------------------------------- /libs/providers/projects/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.json", 3 | "compilerOptions": { 4 | "jsx": "react", 5 | "allowJs": true, 6 | "esModuleInterop": true, 7 | "allowSyntheticDefaultImports": true, 8 | "types": ["node", "jest"] 9 | }, 10 | "files": [ 11 | "../../../node_modules/@nrwl/react/typings/cssmodule.d.ts", 12 | "../../../node_modules/@nrwl/react/typings/image.d.ts" 13 | ], 14 | "include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"], 15 | "exclude": ["./jest.config.js"] 16 | } 17 | -------------------------------------------------------------------------------- /apps/initiative-management/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | InitiativeManagement 6 | 7 | 8 | 9 | 10 | 14 | 15 | 16 |
17 | 18 | 19 | -------------------------------------------------------------------------------- /libs/store/core/src/lib/store.ts: -------------------------------------------------------------------------------- 1 | import { configureStore, getDefaultMiddleware } from '@reduxjs/toolkit'; 2 | import { createEpicMiddleware } from 'redux-observable'; 3 | import { rootReducer as reducer } from './reducers'; 4 | import rootEpic from './epics'; 5 | 6 | const epicMiddleware = createEpicMiddleware(); 7 | const middleware = [...getDefaultMiddleware(), epicMiddleware]; 8 | 9 | export const store = configureStore({ 10 | reducer, 11 | middleware, 12 | devTools: process.env.NODE_ENV !== 'production', 13 | }); 14 | 15 | epicMiddleware.run(rootEpic); 16 | 17 | export default store; 18 | -------------------------------------------------------------------------------- /apps/initiative-management/src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import { Provider } from 'react-redux'; 4 | import { Router } from 'react-router-dom'; 5 | import { createBrowserHistory } from 'history'; 6 | import { store } from '@enterprise/store'; 7 | import App from './app/app'; 8 | 9 | const history = createBrowserHistory(); 10 | 11 | const rootComponent = ( 12 | 13 | 14 | 15 | 16 | 17 | ); 18 | 19 | ReactDOM.render(rootComponent, document.getElementById('root')); 20 | -------------------------------------------------------------------------------- /apps/tools-initiative/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "jsx": "react", 5 | "allowJs": true, 6 | "esModuleInterop": true, 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "files": [ 10 | "../../node_modules/@nrwl/react/typings/cssmodule.d.ts", 11 | "../../node_modules/@nrwl/react/typings/image.d.ts" 12 | ], 13 | "exclude": ["jest.config.js"], 14 | "references": [ 15 | { 16 | "path": "./tsconfig.app.json" 17 | }, 18 | { 19 | "path": "./tsconfig.spec.json" 20 | }, 21 | { 22 | "path": "./tsconfig.e2e.json" 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /apps/initiative-management/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "jsx": "react", 5 | "allowJs": true, 6 | "esModuleInterop": true, 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "files": [ 10 | "../../node_modules/@nrwl/react/typings/cssmodule.d.ts", 11 | "../../node_modules/@nrwl/react/typings/image.d.ts" 12 | ], 13 | "exclude": ["jest.config.js"], 14 | "references": [ 15 | { 16 | "path": "./tsconfig.app.json" 17 | }, 18 | { 19 | "path": "./tsconfig.spec.json" 20 | }, 21 | { 22 | "path": "./tsconfig.e2e.json" 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /apps/outreach-initiative/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "jsx": "react", 5 | "allowJs": true, 6 | "esModuleInterop": true, 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "files": [ 10 | "../../node_modules/@nrwl/react/typings/cssmodule.d.ts", 11 | "../../node_modules/@nrwl/react/typings/image.d.ts" 12 | ], 13 | "exclude": ["jest.config.js"], 14 | "references": [ 15 | { 16 | "path": "./tsconfig.app.json" 17 | }, 18 | { 19 | "path": "./tsconfig.spec.json" 20 | }, 21 | { 22 | "path": "./tsconfig.e2e.json" 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /apps/training-initiative/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "jsx": "react", 5 | "allowJs": true, 6 | "esModuleInterop": true, 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "files": [ 10 | "../../node_modules/@nrwl/react/typings/cssmodule.d.ts", 11 | "../../node_modules/@nrwl/react/typings/image.d.ts" 12 | ], 13 | "exclude": ["jest.config.js"], 14 | "references": [ 15 | { 16 | "path": "./tsconfig.app.json" 17 | }, 18 | { 19 | "path": "./tsconfig.spec.json" 20 | }, 21 | { 22 | "path": "./tsconfig.e2e.json" 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | /dist 5 | /tmp 6 | /out-tsc 7 | 8 | # dependencies 9 | /node_modules 10 | 11 | # IDEs and editors 12 | /.idea 13 | .project 14 | .classpath 15 | .c9/ 16 | *.launch 17 | .settings/ 18 | *.sublime-workspace 19 | 20 | # IDE - VSCode 21 | .vscode/* 22 | !.vscode/settings.json 23 | !.vscode/tasks.json 24 | !.vscode/launch.json 25 | !.vscode/extensions.json 26 | 27 | # misc 28 | /.sass-cache 29 | /connect.lock 30 | /coverage 31 | /libpeerconnection.log 32 | npm-debug.log 33 | yarn-error.log 34 | testem.log 35 | /typings 36 | 37 | # System Files 38 | .DS_Store 39 | Thumbs.db 40 | -------------------------------------------------------------------------------- /apps/tools-initiative/e2e/support/index.ts: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example support/index.js is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // 8 | // You can change the location of this file or turn off 9 | // automatically serving support files with the 10 | // 'supportFile' configuration option. 11 | // 12 | // You can read more here: 13 | // https://on.cypress.io/configuration 14 | // *********************************************************** 15 | 16 | // Import commands.js using ES2015 syntax: 17 | import './commands'; 18 | -------------------------------------------------------------------------------- /libs/design-system/e2e/support/index.ts: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example support/index.js is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // 8 | // You can change the location of this file or turn off 9 | // automatically serving support files with the 10 | // 'supportFile' configuration option. 11 | // 12 | // You can read more here: 13 | // https://on.cypress.io/configuration 14 | // *********************************************************** 15 | 16 | // Import commands.js using ES2015 syntax: 17 | import './commands'; 18 | -------------------------------------------------------------------------------- /apps/initiative-management/e2e/support/index.ts: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example support/index.js is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // 8 | // You can change the location of this file or turn off 9 | // automatically serving support files with the 10 | // 'supportFile' configuration option. 11 | // 12 | // You can read more here: 13 | // https://on.cypress.io/configuration 14 | // *********************************************************** 15 | 16 | // Import commands.js using ES2015 syntax: 17 | import './commands'; 18 | -------------------------------------------------------------------------------- /apps/outreach-initiative/e2e/support/index.ts: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example support/index.js is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // 8 | // You can change the location of this file or turn off 9 | // automatically serving support files with the 10 | // 'supportFile' configuration option. 11 | // 12 | // You can read more here: 13 | // https://on.cypress.io/configuration 14 | // *********************************************************** 15 | 16 | // Import commands.js using ES2015 syntax: 17 | import './commands'; 18 | -------------------------------------------------------------------------------- /apps/training-initiative/e2e/support/index.ts: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example support/index.js is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // 8 | // You can change the location of this file or turn off 9 | // automatically serving support files with the 10 | // 'supportFile' configuration option. 11 | // 12 | // You can read more here: 13 | // https://on.cypress.io/configuration 14 | // *********************************************************** 15 | 16 | // Import commands.js using ES2015 syntax: 17 | import './commands'; 18 | -------------------------------------------------------------------------------- /libs/design-system/.storybook/webpack.config.js: -------------------------------------------------------------------------------- 1 | const rootWebpackConfig = require('../../../.storybook/webpack.config'); 2 | // Export a function. Accept the base config as the only param. 3 | module.exports = async ({ config, mode }) => { 4 | config = await rootWebpackConfig({ config, mode }); 5 | 6 | config.resolve.extensions.push('.tsx'); 7 | config.resolve.extensions.push('.ts'); 8 | config.module.rules.push({ 9 | test: /\.(ts|tsx)$/, 10 | loader: require.resolve('babel-loader'), 11 | options: { 12 | presets: [ 13 | '@babel/preset-env', 14 | '@babel/preset-react', 15 | '@babel/preset-typescript' 16 | ] 17 | } 18 | }); 19 | return config; 20 | }; 21 | -------------------------------------------------------------------------------- /libs/providers/projects/src/lib/providers-projects.tsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useCallback } from 'react'; 2 | import { useDispatch, useSelector } from 'react-redux'; 3 | import { projectsActions, projectsSelectors } from '@enterprise/store/projects'; 4 | 5 | export const useProjects = () => { 6 | const dispatch = useDispatch(); 7 | const projects = useSelector(projectsSelectors.selectAll); 8 | 9 | useEffect(() => { 10 | dispatch(projectsActions.projectsRequested()); 11 | }, [dispatch]); 12 | 13 | const updateProject = useCallback( 14 | (projectData) => { 15 | dispatch(projectsActions.projectUpdated(projectData)); 16 | }, 17 | [dispatch] 18 | ); 19 | 20 | return [projects, { updateProject }]; 21 | }; 22 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | projects: [ 3 | '/apps/initiative-management', 4 | '/libs/design-system', 5 | '/libs/domain-types', 6 | '/libs/services/projects', 7 | '/libs/services/tasks', 8 | '/libs/services/people', 9 | '/libs/services/accounts', 10 | '/apps/training-initiative', 11 | '/apps/outreach-initiative', 12 | '/apps/tools-initiative', 13 | '/libs/store/accounts', 14 | '/libs/store/people', 15 | '/libs/store/projects', 16 | '/libs/store/tasks', 17 | '/libs/store/core', 18 | '/libs/providers/projects', 19 | ], 20 | }; 21 | -------------------------------------------------------------------------------- /apps/tools-initiative/src/app/app.spec.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render } from '@testing-library/react'; 3 | 4 | import { BrowserRouter } from 'react-router-dom'; 5 | 6 | import App from './app'; 7 | 8 | describe('App', () => { 9 | it('should render successfully', () => { 10 | const { baseElement } = render( 11 | 12 | 13 | 14 | ); 15 | 16 | expect(baseElement).toBeTruthy(); 17 | }); 18 | 19 | it('should have a greeting as the title', () => { 20 | const { getByText } = render( 21 | 22 | 23 | 24 | ); 25 | 26 | expect(getByText('Welcome to tools-initiative!')).toBeTruthy(); 27 | }); 28 | }); 29 | -------------------------------------------------------------------------------- /apps/outreach-initiative/src/app/app.spec.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render } from '@testing-library/react'; 3 | 4 | import { BrowserRouter } from 'react-router-dom'; 5 | 6 | import App from './app'; 7 | 8 | describe('App', () => { 9 | it('should render successfully', () => { 10 | const { baseElement } = render( 11 | 12 | 13 | 14 | ); 15 | 16 | expect(baseElement).toBeTruthy(); 17 | }); 18 | 19 | it('should have a greeting as the title', () => { 20 | const { getByText } = render( 21 | 22 | 23 | 24 | ); 25 | 26 | expect(getByText('Welcome to outreach-initiative!')).toBeTruthy(); 27 | }); 28 | }); 29 | -------------------------------------------------------------------------------- /apps/training-initiative/src/app/app.spec.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render } from '@testing-library/react'; 3 | 4 | import { BrowserRouter } from 'react-router-dom'; 5 | 6 | import App from './app'; 7 | 8 | describe('App', () => { 9 | it('should render successfully', () => { 10 | const { baseElement } = render( 11 | 12 | 13 | 14 | ); 15 | 16 | expect(baseElement).toBeTruthy(); 17 | }); 18 | 19 | it('should have a greeting as the title', () => { 20 | const { getByText } = render( 21 | 22 | 23 | 24 | ); 25 | 26 | expect(getByText('Welcome to training-initiative!')).toBeTruthy(); 27 | }); 28 | }); 29 | -------------------------------------------------------------------------------- /libs/design-system/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "jsx": "react", 5 | "allowJs": true, 6 | "esModuleInterop": true, 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "files": [ 10 | "../../node_modules/@nrwl/react/typings/cssmodule.d.ts", 11 | "../../node_modules/@nrwl/react/typings/image.d.ts" 12 | ], 13 | "include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"], 14 | "exclude": ["jest.config.js"], 15 | "references": [ 16 | { 17 | "path": "./tsconfig.lib.json" 18 | }, 19 | { 20 | "path": "./tsconfig.spec.json" 21 | }, 22 | { 23 | "path": "./tsconfig.e2e.json" 24 | }, 25 | { 26 | "path": "./.storybook/tsconfig.json" 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /libs/design-system/src/components/app-bar/app-bar.stories.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { text } from '@storybook/addon-knobs'; 3 | import { AccountCircle } from '@material-ui/icons'; 4 | import { AppBar } from './app-bar'; 5 | import { NavigationMenu } from '../navigation-menu'; 6 | 7 | export default { title: 'AppBar' }; 8 | 9 | const actions = [ 10 | { 11 | label: 'See Cart', 12 | href: './cart', 13 | callback() { 14 | console.log('Navigate to cart page'); 15 | }, 16 | }, 17 | { 18 | label: 'Preferences', 19 | callback() { 20 | console.log('Open Preferences'); 21 | }, 22 | }, 23 | ]; 24 | 25 | export const primary = (): JSX.Element => ( 26 | 27 | 28 | 29 | 30 | 31 | ); 32 | -------------------------------------------------------------------------------- /libs/design-system/src/components/navigation-menu/navigation-menu.stories.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { object } from '@storybook/addon-knobs'; 3 | import { AccountCircle } from '@material-ui/icons'; 4 | import { NavigationMenu, NavigationMenuActions } from './navigation-menu'; 5 | 6 | export default { title: 'NavigationMenu' }; 7 | 8 | export const primary = (): JSX.Element => { 9 | const actions: NavigationMenuActions[] = [ 10 | { 11 | label: 'Profile', 12 | href: './profile', 13 | callback(ev) { 14 | console.log('Profile'); 15 | }, 16 | }, 17 | { 18 | label: 'Logout', 19 | callback() { 20 | console.log('Logout'); 21 | }, 22 | }, 23 | ]; 24 | const actionKnob = object('Actions', actions); 25 | return ( 26 | 27 | 28 | 29 | ); 30 | }; 31 | -------------------------------------------------------------------------------- /libs/design-system/src/components/app-bar/app-bar.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from 'react'; 2 | import { 3 | AppBar as MaterialAppBar, 4 | Toolbar, 5 | Typography, 6 | } from '@material-ui/core'; 7 | import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'; 8 | 9 | const useStyles = makeStyles((theme: Theme) => 10 | createStyles({ 11 | title: { 12 | flexGrow: 1, 13 | }, 14 | }) 15 | ); 16 | 17 | export interface AppBarProps { 18 | heading?: string | null; 19 | children?: ReactNode; 20 | } 21 | 22 | export const AppBar = ({ heading, children }: AppBarProps): JSX.Element => { 23 | const { title } = useStyles(); 24 | 25 | return ( 26 | 27 | 28 | 29 | {heading} 30 | 31 | {children} 32 | 33 | 34 | ); 35 | }; 36 | -------------------------------------------------------------------------------- /libs/design-system/e2e/plugins/index.js: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example plugins/index.js can be used to load plugins 3 | // 4 | // You can change the location of this file or turn off loading 5 | // the plugins file with the 'pluginsFile' configuration option. 6 | // 7 | // You can read more here: 8 | // https://on.cypress.io/plugins-guide 9 | // *********************************************************** 10 | 11 | // This function is called when a project is opened or re-opened (e.g. due to 12 | // the project's config changing) 13 | 14 | const { preprocessTypescript } = require('@nrwl/cypress/plugins/preprocessor'); 15 | 16 | module.exports = (on, config) => { 17 | // `on` is used to hook into various events Cypress emits 18 | // `config` is the resolved Cypress config 19 | 20 | // Preprocess Typescript file using Nx helper 21 | on('file:preprocessor', preprocessTypescript(config)); 22 | }; 23 | -------------------------------------------------------------------------------- /apps/outreach-initiative/e2e/plugins/index.js: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example plugins/index.js can be used to load plugins 3 | // 4 | // You can change the location of this file or turn off loading 5 | // the plugins file with the 'pluginsFile' configuration option. 6 | // 7 | // You can read more here: 8 | // https://on.cypress.io/plugins-guide 9 | // *********************************************************** 10 | 11 | // This function is called when a project is opened or re-opened (e.g. due to 12 | // the project's config changing) 13 | 14 | const { preprocessTypescript } = require('@nrwl/cypress/plugins/preprocessor'); 15 | 16 | module.exports = (on, config) => { 17 | // `on` is used to hook into various events Cypress emits 18 | // `config` is the resolved Cypress config 19 | 20 | // Preprocess Typescript file using Nx helper 21 | on('file:preprocessor', preprocessTypescript(config)); 22 | }; 23 | -------------------------------------------------------------------------------- /apps/tools-initiative/e2e/plugins/index.js: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example plugins/index.js can be used to load plugins 3 | // 4 | // You can change the location of this file or turn off loading 5 | // the plugins file with the 'pluginsFile' configuration option. 6 | // 7 | // You can read more here: 8 | // https://on.cypress.io/plugins-guide 9 | // *********************************************************** 10 | 11 | // This function is called when a project is opened or re-opened (e.g. due to 12 | // the project's config changing) 13 | 14 | const { preprocessTypescript } = require('@nrwl/cypress/plugins/preprocessor'); 15 | 16 | module.exports = (on, config) => { 17 | // `on` is used to hook into various events Cypress emits 18 | // `config` is the resolved Cypress config 19 | 20 | // Preprocess Typescript file using Nx helper 21 | on('file:preprocessor', preprocessTypescript(config)); 22 | }; 23 | -------------------------------------------------------------------------------- /apps/training-initiative/e2e/plugins/index.js: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example plugins/index.js can be used to load plugins 3 | // 4 | // You can change the location of this file or turn off loading 5 | // the plugins file with the 'pluginsFile' configuration option. 6 | // 7 | // You can read more here: 8 | // https://on.cypress.io/plugins-guide 9 | // *********************************************************** 10 | 11 | // This function is called when a project is opened or re-opened (e.g. due to 12 | // the project's config changing) 13 | 14 | const { preprocessTypescript } = require('@nrwl/cypress/plugins/preprocessor'); 15 | 16 | module.exports = (on, config) => { 17 | // `on` is used to hook into various events Cypress emits 18 | // `config` is the resolved Cypress config 19 | 20 | // Preprocess Typescript file using Nx helper 21 | on('file:preprocessor', preprocessTypescript(config)); 22 | }; 23 | -------------------------------------------------------------------------------- /apps/initiative-management/e2e/plugins/index.js: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example plugins/index.js can be used to load plugins 3 | // 4 | // You can change the location of this file or turn off loading 5 | // the plugins file with the 'pluginsFile' configuration option. 6 | // 7 | // You can read more here: 8 | // https://on.cypress.io/plugins-guide 9 | // *********************************************************** 10 | 11 | // This function is called when a project is opened or re-opened (e.g. due to 12 | // the project's config changing) 13 | 14 | const { preprocessTypescript } = require('@nrwl/cypress/plugins/preprocessor'); 15 | 16 | module.exports = (on, config) => { 17 | // `on` is used to hook into various events Cypress emits 18 | // `config` is the resolved Cypress config 19 | 20 | // Preprocess Typescript file using Nx helper 21 | on('file:preprocessor', preprocessTypescript(config)); 22 | }; 23 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "parserOptions": { 5 | "ecmaVersion": 2019, 6 | "sourceType": "module", 7 | "project": "./tsconfig.json" 8 | }, 9 | "ignorePatterns": ["**/*"], 10 | "plugins": ["@typescript-eslint", "@nrwl/nx"], 11 | "extends": [ 12 | "eslint:recommended", 13 | "plugin:@typescript-eslint/eslint-recommended", 14 | "plugin:@typescript-eslint/recommended", 15 | "prettier", 16 | "prettier/@typescript-eslint" 17 | ], 18 | "rules": { 19 | "@typescript-eslint/explicit-member-accessibility": "off", 20 | "@typescript-eslint/explicit-function-return-type": "off", 21 | "@typescript-eslint/no-parameter-properties": "off", 22 | "@nrwl/nx/enforce-module-boundaries": [ 23 | "error", 24 | { 25 | "enforceBuildableLibDependency": true, 26 | "allow": [], 27 | "depConstraints": [ 28 | { "sourceTag": "*", "onlyDependOnLibsWithTags": ["*"] } 29 | ] 30 | } 31 | ] 32 | }, 33 | "overrides": [ 34 | { 35 | "files": ["*.tsx"], 36 | "rules": { 37 | "@typescript-eslint/no-unused-vars": "off" 38 | } 39 | } 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /libs/design-system/e2e/support/commands.ts: -------------------------------------------------------------------------------- 1 | // *********************************************** 2 | // This example commands.js shows you how to 3 | // create various custom commands and overwrite 4 | // existing commands. 5 | // 6 | // For more comprehensive examples of custom 7 | // commands please read more here: 8 | // https://on.cypress.io/custom-commands 9 | // *********************************************** 10 | // eslint-disable-next-line @typescript-eslint/no-namespace 11 | declare namespace Cypress { 12 | interface Chainable { 13 | login(email: string, password: string): void; 14 | } 15 | } 16 | // 17 | // -- This is a parent command -- 18 | Cypress.Commands.add('login', (email, password) => { 19 | console.log('Custom command example: Login', email, password); 20 | }); 21 | // 22 | // -- This is a child command -- 23 | // Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) 24 | // 25 | // 26 | // -- This is a dual command -- 27 | // Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) 28 | // 29 | // 30 | // -- This will overwrite an existing command -- 31 | // Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) 32 | -------------------------------------------------------------------------------- /apps/outreach-initiative/e2e/support/commands.ts: -------------------------------------------------------------------------------- 1 | // *********************************************** 2 | // This example commands.js shows you how to 3 | // create various custom commands and overwrite 4 | // existing commands. 5 | // 6 | // For more comprehensive examples of custom 7 | // commands please read more here: 8 | // https://on.cypress.io/custom-commands 9 | // *********************************************** 10 | // eslint-disable-next-line @typescript-eslint/no-namespace 11 | declare namespace Cypress { 12 | interface Chainable { 13 | login(email: string, password: string): void; 14 | } 15 | } 16 | // 17 | // -- This is a parent command -- 18 | Cypress.Commands.add('login', (email, password) => { 19 | console.log('Custom command example: Login', email, password); 20 | }); 21 | // 22 | // -- This is a child command -- 23 | // Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) 24 | // 25 | // 26 | // -- This is a dual command -- 27 | // Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) 28 | // 29 | // 30 | // -- This will overwrite an existing command -- 31 | // Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) 32 | -------------------------------------------------------------------------------- /apps/tools-initiative/e2e/support/commands.ts: -------------------------------------------------------------------------------- 1 | // *********************************************** 2 | // This example commands.js shows you how to 3 | // create various custom commands and overwrite 4 | // existing commands. 5 | // 6 | // For more comprehensive examples of custom 7 | // commands please read more here: 8 | // https://on.cypress.io/custom-commands 9 | // *********************************************** 10 | // eslint-disable-next-line @typescript-eslint/no-namespace 11 | declare namespace Cypress { 12 | interface Chainable { 13 | login(email: string, password: string): void; 14 | } 15 | } 16 | // 17 | // -- This is a parent command -- 18 | Cypress.Commands.add('login', (email, password) => { 19 | console.log('Custom command example: Login', email, password); 20 | }); 21 | // 22 | // -- This is a child command -- 23 | // Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) 24 | // 25 | // 26 | // -- This is a dual command -- 27 | // Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) 28 | // 29 | // 30 | // -- This will overwrite an existing command -- 31 | // Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) 32 | -------------------------------------------------------------------------------- /apps/training-initiative/e2e/support/commands.ts: -------------------------------------------------------------------------------- 1 | // *********************************************** 2 | // This example commands.js shows you how to 3 | // create various custom commands and overwrite 4 | // existing commands. 5 | // 6 | // For more comprehensive examples of custom 7 | // commands please read more here: 8 | // https://on.cypress.io/custom-commands 9 | // *********************************************** 10 | // eslint-disable-next-line @typescript-eslint/no-namespace 11 | declare namespace Cypress { 12 | interface Chainable { 13 | login(email: string, password: string): void; 14 | } 15 | } 16 | // 17 | // -- This is a parent command -- 18 | Cypress.Commands.add('login', (email, password) => { 19 | console.log('Custom command example: Login', email, password); 20 | }); 21 | // 22 | // -- This is a child command -- 23 | // Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) 24 | // 25 | // 26 | // -- This is a dual command -- 27 | // Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) 28 | // 29 | // 30 | // -- This will overwrite an existing command -- 31 | // Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) 32 | -------------------------------------------------------------------------------- /apps/initiative-management/src/app/components/user-nav-menu/user-nav-menu.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC } from 'react'; 2 | import { AccountCircle } from '@material-ui/icons'; 3 | import { 4 | NavigationMenu, 5 | NavigationMenuActions, 6 | } from '@enterprise/design-system'; 7 | import { UserAccount } from '@enterprise/domain-types'; 8 | // eslint-disable-next-line @nrwl/nx/enforce-module-boundaries 9 | import { useProjects } from '@enterprise/providers/projects'; 10 | 11 | interface UserNavMenuProps { 12 | userAccount?: UserAccount | null; 13 | } 14 | 15 | export const UserNavMenu: FC = ({ 16 | userAccount, 17 | }: UserNavMenuProps) => { 18 | const [projects] = useProjects(); 19 | 20 | if (!userAccount) { 21 | return null; 22 | } 23 | const actions: NavigationMenuActions[] = [ 24 | { 25 | label: 'Profile', 26 | href: './profile', 27 | callback(ev) { 28 | // console.log('PROFILE', project1); 29 | }, 30 | }, 31 | { 32 | label: 'Logout', 33 | callback() { 34 | console.log('projects', projects); 35 | }, 36 | }, 37 | ]; 38 | 39 | return ( 40 | 41 | 42 | 43 | ); 44 | }; 45 | 46 | export default UserNavMenu; 47 | -------------------------------------------------------------------------------- /apps/initiative-management/e2e/support/commands.ts: -------------------------------------------------------------------------------- 1 | // *********************************************** 2 | // This example commands.js shows you how to 3 | // create various custom commands and overwrite 4 | // existing commands. 5 | // 6 | // For more comprehensive examples of custom 7 | // commands please read more here: 8 | // https://on.cypress.io/custom-commands 9 | // *********************************************** 10 | // eslint-disable-next-line @typescript-eslint/no-namespace 11 | declare namespace Cypress { 12 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 13 | interface Chainable { 14 | login(email: string, password: string): void; 15 | } 16 | } 17 | // 18 | // -- This is a parent command -- 19 | Cypress.Commands.add('login', (email, password) => { 20 | console.log('Custom command example: Login', email, password); 21 | }); 22 | // 23 | // -- This is a child command -- 24 | // Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) 25 | // 26 | // 27 | // -- This is a dual command -- 28 | // Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) 29 | // 30 | // 31 | // -- This will overwrite an existing command -- 32 | // Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) 33 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "rootDir": ".", 5 | "sourceMap": true, 6 | "declaration": false, 7 | "moduleResolution": "node", 8 | "emitDecoratorMetadata": true, 9 | "experimentalDecorators": true, 10 | "importHelpers": true, 11 | "target": "es2015", 12 | "module": "esnext", 13 | "typeRoots": ["node_modules/@types"], 14 | "lib": ["es2019", "dom"], 15 | "skipLibCheck": true, 16 | "skipDefaultLibCheck": true, 17 | "baseUrl": ".", 18 | "paths": { 19 | "@enterprise/design-system": ["libs/design-system/src/index.ts"], 20 | "@enterprise/domain-types": ["libs/domain-types/src/index.ts"], 21 | "@enterprise/services/projects": ["libs/services/projects/src/index.ts"], 22 | "@enterprise/services/tasks": ["libs/services/tasks/src/index.ts"], 23 | "@enterprise/services/people": ["libs/services/people/src/index.ts"], 24 | "@enterprise/services/accounts": ["libs/services/accounts/src/index.ts"], 25 | "@enterprise/store/accounts": ["libs/store/accounts/src/index.ts"], 26 | "@enterprise/store/people": ["libs/store/people/src/index.ts"], 27 | "@enterprise/store/projects": ["libs/store/projects/src/index.ts"], 28 | "@enterprise/store/tasks": ["libs/store/tasks/src/index.ts"], 29 | "@enterprise/store": ["libs/store/core/src/index.ts"], 30 | "@enterprise/providers/projects": ["libs/providers/projects/src/index.ts"] 31 | } 32 | }, 33 | "exclude": ["node_modules", "tmp"] 34 | } 35 | -------------------------------------------------------------------------------- /libs/store/projects/src/lib/store-projects.spec.ts: -------------------------------------------------------------------------------- 1 | import { 2 | projectsReducer, 3 | projectsRequested, 4 | projectsErrored, 5 | Status, 6 | projectsReceived, 7 | } from './store-projects'; 8 | 9 | describe('projects reducer', () => { 10 | it('should handle initial state', () => { 11 | expect(projectsReducer(undefined, { type: '' })).toMatchObject({ 12 | ids: [], 13 | entities: {}, 14 | status: Status.idle, 15 | }); 16 | }); 17 | 18 | it('should handle projectsRequested actions', () => { 19 | let state = projectsReducer(undefined, projectsRequested()); 20 | 21 | expect(state).toEqual({ 22 | ids: [], 23 | entities: {}, 24 | status: Status.pending, 25 | }); 26 | 27 | state = projectsReducer( 28 | state, 29 | projectsReceived([ 30 | { 31 | id: 1, 32 | name: 'Test Project', 33 | initiativeId: 12, 34 | }, 35 | ]) 36 | ); 37 | 38 | expect(state).toEqual({ 39 | ids: [1], 40 | entities: { 41 | 1: { 42 | id: 1, 43 | name: 'Test Project', 44 | initiativeId: 12, 45 | }, 46 | }, 47 | status: Status.idle, 48 | }); 49 | 50 | state = projectsReducer(state, projectsErrored({ message: 'Uh oh' })); 51 | 52 | expect(state).toEqual({ 53 | ids: [1], 54 | entities: { 55 | '1': { 56 | id: 1, 57 | name: 'Test Project', 58 | initiativeId: 12, 59 | }, 60 | }, 61 | status: Status.error, 62 | error: { 63 | message: 'Uh oh', 64 | }, 65 | }); 66 | }); 67 | }); 68 | -------------------------------------------------------------------------------- /nx.json: -------------------------------------------------------------------------------- 1 | { 2 | "npmScope": "enterprise", 3 | "implicitDependencies": { 4 | "workspace.json": "*", 5 | "package.json": { 6 | "dependencies": "*", 7 | "devDependencies": "*" 8 | }, 9 | "tsconfig.json": "*", 10 | "tslint.json": "*", 11 | "nx.json": "*" 12 | }, 13 | "tasksRunnerOptions": { 14 | "default": { 15 | "runner": "@nrwl/workspace/tasks-runners/default", 16 | "options": { 17 | "cacheableOperations": [ 18 | "build", 19 | "lint", 20 | "test", 21 | "e2e", 22 | "build-storybook" 23 | ] 24 | } 25 | } 26 | }, 27 | "projects": { 28 | "initiative-management": { 29 | "tags": [] 30 | }, 31 | "design-system": { 32 | "tags": ["type:ui"] 33 | }, 34 | "domain-types": { 35 | "tags": ["type:util"] 36 | }, 37 | "services-projects": { 38 | "tags": [] 39 | }, 40 | "services-tasks": { 41 | "tags": [] 42 | }, 43 | "services-people": { 44 | "tags": [] 45 | }, 46 | "services-accounts": { 47 | "tags": [] 48 | }, 49 | "training-initiative": { 50 | "tags": ["type:application initiative:training"] 51 | }, 52 | "outreach-initiative": { 53 | "tags": ["type:application initiative:outreach"] 54 | }, 55 | "tools-initiative": { 56 | "tags": ["type:application initiative:tools"] 57 | }, 58 | "store-accounts": { 59 | "tags": ["store"] 60 | }, 61 | "store-people": { 62 | "tags": ["store"] 63 | }, 64 | "store-projects": { 65 | "tags": ["store"] 66 | }, 67 | "store-tasks": { 68 | "tags": ["store"] 69 | }, 70 | "store-core": { 71 | "tags": ["store"] 72 | }, 73 | "providers-projects": { 74 | "tags": [] 75 | } 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "rulesDirectory": ["node_modules/@nrwl/workspace/src/tslint"], 4 | "linterOptions": { 5 | "exclude": ["**/*"] 6 | }, 7 | "rules": { 8 | "arrow-return-shorthand": true, 9 | "callable-types": true, 10 | "class-name": true, 11 | "deprecation": { 12 | "severity": "warn" 13 | }, 14 | "forin": true, 15 | "import-blacklist": [true, "rxjs/Rx"], 16 | "interface-over-type-literal": true, 17 | "member-access": false, 18 | "member-ordering": [ 19 | true, 20 | { 21 | "order": [ 22 | "static-field", 23 | "instance-field", 24 | "static-method", 25 | "instance-method" 26 | ] 27 | } 28 | ], 29 | "no-arg": true, 30 | "no-bitwise": true, 31 | "no-console": [true, "debug", "info", "time", "timeEnd", "trace"], 32 | "no-construct": true, 33 | "no-debugger": true, 34 | "no-duplicate-super": true, 35 | "no-empty": false, 36 | "no-empty-interface": true, 37 | "no-eval": true, 38 | "no-inferrable-types": [true, "ignore-params"], 39 | "no-misused-new": true, 40 | "no-non-null-assertion": true, 41 | "no-shadowed-variable": true, 42 | "no-string-literal": false, 43 | "no-string-throw": true, 44 | "no-switch-case-fall-through": true, 45 | "no-unnecessary-initializer": true, 46 | "no-unused-expression": true, 47 | "no-var-keyword": true, 48 | "object-literal-sort-keys": false, 49 | "prefer-const": true, 50 | "radix": true, 51 | "triple-equals": [true, "allow-null-check"], 52 | "unified-signatures": true, 53 | "variable-name": false, 54 | 55 | "nx-enforce-module-boundaries": [ 56 | true, 57 | { 58 | "enforceBuildableLibDependency": true, 59 | "allow": [], 60 | "depConstraints": [ 61 | { "sourceTag": "*", "onlyDependOnLibsWithTags": ["*"] } 62 | ] 63 | } 64 | ] 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🏢 Enterprise Scale React App 2 | 3 | This project was generated using [Nx](https://nx.dev) a set of Extensible Dev Tools for Monorepos. 4 | 5 | This is an example repo for the ideas from the talk [How to Build Large Scale React apps](https://slides.com/bigab/how-to-build-large-scale-react-apps) by [Adam L Barrett](https://twitter.com/adamlbarrett). It is obviously **not** large scale or enterprise, but I hope it helps convey the idea of where the boundaries and contracts can lay in the simple architecture to allow multiple teams to work on the app concurrently with fewer problems. 6 | 7 | ## Development 8 | 9 | ### Dev Server 10 | 11 | Run `nx serve initiative-management` for a dev server. Navigate to http://localhost:4200/. The app will automatically reload if you change any of the source files. 12 | 13 | ## Build 14 | 15 | Run `nx build initiative-management` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build. 16 | 17 | ## Generate a library 18 | 19 | Run `nx g @nrwl/react:lib my-lib` to generate a library. 20 | 21 | Libraries are sharable across libraries and applications. They can be imported from `@enterprise/my-lib`. 22 | 23 | ## Code scaffolding 24 | 25 | Run `nx g @nrwl/react:component my-component --project=initiative-management` to generate a new Domain Component. 26 | 27 | Run `nx g @nrwl/react:component design-system --project=design-system` to generate a new UI Component. 28 | 29 | ## Running unit tests 30 | 31 | Run `nx test my-project` to execute the unit tests via [Jest](https://jestjs.io). 32 | 33 | Run `nx affected:test` to execute the unit tests affected by a change. 34 | 35 | ## Running end-to-end tests 36 | 37 | Run `ng e2e initiative-management` to execute the end-to-end tests via [Cypress](https://www.cypress.io). 38 | 39 | Run `nx affected:e2e` to execute the end-to-end tests affected by a change. 40 | 41 | ## Understand your workspace 42 | 43 | Run `nx dep-graph` to see a diagram of the dependencies of your projects. 44 | 45 | -------------------------------------------------------------------------------- /libs/store/projects/src/lib/store-projects.ts: -------------------------------------------------------------------------------- 1 | import { 2 | createEntityAdapter, 3 | createSlice, 4 | EntityState, 5 | } from '@reduxjs/toolkit'; 6 | import { map } from 'rxjs/operators'; 7 | import { ofType } from 'redux-observable'; 8 | import { Project } from '@enterprise/domain-types'; 9 | 10 | interface State { 11 | projects: EntityState; 12 | } 13 | 14 | export enum Status { 15 | idle = 'idle', 16 | pending = 'pending', 17 | success = 'success', 18 | error = 'error', 19 | } 20 | 21 | // Since we don't provide `selectId`, it defaults to assuming `entity.id` is the right field 22 | const projectsAdapter = createEntityAdapter({ 23 | // Keep the "all IDs" array sorted based on project name 24 | sortComparer: (a, b) => a.name.localeCompare(b.name), 25 | }); 26 | 27 | export const projectsSlice = createSlice({ 28 | name: 'projects', 29 | initialState: projectsAdapter.getInitialState({ 30 | status: Status.idle, 31 | }), 32 | reducers: { 33 | projectsRequested(state) { 34 | if (state.status === Status.idle) { 35 | state.status = Status.pending; 36 | } 37 | }, 38 | projectsReceived(state, { payload: projects }) { 39 | if (state.status === Status.pending) { 40 | // Or, call them as "mutating" helpers in a case reducer 41 | projectsAdapter.setAll(state, projects); 42 | state.status = Status.idle; 43 | } 44 | }, 45 | projectsErrored(state, { payload: message }) { 46 | return { ...state, error: message, status: Status.error }; 47 | }, 48 | // Can pass adapter functions directly as case reducers. Because we're passing this 49 | // as a value, `createSlice` will auto-generate the `projectAdded` action type / creator 50 | projectAdded: projectsAdapter.addOne, 51 | projectUpdated: projectsAdapter.updateOne, 52 | }, 53 | }); 54 | 55 | export const projectsReducer = projectsSlice.reducer; 56 | 57 | export const projectsActions = projectsSlice.actions; 58 | export const { 59 | projectAdded, 60 | projectsRequested, 61 | projectsReceived, 62 | projectUpdated, 63 | projectsErrored, 64 | } = projectsSlice.actions; 65 | 66 | export const projectsEpic = (action$) => 67 | action$.pipe( 68 | ofType(projectsRequested), 69 | map(() => 70 | projectsReceived([ 71 | { id: 1, name: 'Project 1', description: 'Cool', initiativeId: 12 }, 72 | { id: 2, name: 'Project 2', description: 'Not Cool', initiativeId: 11 }, 73 | ]) 74 | ) 75 | ); 76 | 77 | export const projectsSelectors = projectsAdapter.getSelectors( 78 | (state) => state[projectsSlice.name] 79 | ); 80 | -------------------------------------------------------------------------------- /libs/design-system/src/components/navigation-menu/navigation-menu.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState, ReactNode } from 'react'; 2 | import { Button, IconButton, MenuItem, Menu } from '@material-ui/core'; 3 | import styled from 'styled-components'; 4 | 5 | export interface NavigationMenuActions { 6 | label: string; 7 | href?: string; 8 | callback?: (event?: React.MouseEvent) => void; 9 | } 10 | 11 | export interface NavigationMenuProps { 12 | actions?: NavigationMenuActions[]; 13 | ariaLabel?: string; 14 | ariaId?: string; 15 | children: ReactNode; 16 | } 17 | 18 | const Anchor = styled.a.attrs({ 19 | rel: 'noreferrer noopener', 20 | })` 21 | color: inherit; 22 | text-decoration: inherit; 23 | `; 24 | 25 | export const NavigationMenu = ({ 26 | actions = [], 27 | ariaLabel, 28 | ariaId, 29 | children, 30 | }: NavigationMenuProps): JSX.Element => { 31 | const [anchorEl, setAnchorEl] = useState(null); 32 | const open = Boolean(anchorEl); 33 | 34 | const handleClick = (event: React.MouseEvent) => { 35 | if (actions.length) { 36 | setAnchorEl(event.currentTarget); 37 | } 38 | }; 39 | 40 | const handleClose = ( 41 | event: React.MouseEvent, 42 | action?: NavigationMenuActions 43 | ) => { 44 | if (action?.callback) { 45 | event.preventDefault(); 46 | action.callback(event); 47 | } 48 | setAnchorEl(null); 49 | }; 50 | 51 | const element = 52 | typeof children === 'string' ? ( 53 | 62 | ) : ( 63 | 70 | {children} 71 | 72 | ); 73 | 74 | return ( 75 |
76 | {element} 77 | ) => handleClose(event)} 83 | > 84 | {actions.map((action) => ( 85 | handleClose(event, action)} 88 | > 89 | {action.href ? ( 90 | {action.label} 91 | ) : ( 92 | action.label 93 | )} 94 | 95 | ))} 96 | 97 |
98 | ); 99 | }; 100 | -------------------------------------------------------------------------------- /apps/outreach-initiative/src/app/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /apps/tools-initiative/src/app/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /apps/training-initiative/src/app/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "enterprise", 3 | "version": "0.0.0", 4 | "license": "MIT", 5 | "private": true, 6 | "scripts": { 7 | "nx": "nx", 8 | "start": "nx serve", 9 | "build": "nx build", 10 | "test": "nx test", 11 | "lint": "nx workspace-lint && nx lint", 12 | "e2e": "nx e2e", 13 | "affected:apps": "nx affected:apps", 14 | "affected:libs": "nx affected:libs", 15 | "affected:build": "nx affected:build", 16 | "affected:e2e": "nx affected:e2e", 17 | "affected:test": "nx affected:test", 18 | "affected:lint": "nx affected:lint", 19 | "affected:dep-graph": "nx affected:dep-graph", 20 | "affected": "nx affected", 21 | "format": "nx format:write", 22 | "format:write": "nx format:write", 23 | "format:check": "nx format:check", 24 | "update": "nx migrate latest", 25 | "workspace-schematic": "nx workspace-schematic", 26 | "dep-graph": "nx dep-graph", 27 | "help": "nx help", 28 | "commit": "git-cz", 29 | "storybook": "nx storybook design-system" 30 | }, 31 | "dependencies": { 32 | "@material-ui/core": "^4.9.13", 33 | "@material-ui/icons": "^4.9.1", 34 | "@reduxjs/toolkit": "1.9.0", 35 | "@types/react-redux": "7.1.9", 36 | "document-register-element": "^1.14.10", 37 | "history": "^5.0.0", 38 | "react": "^17.0.1", 39 | "react-dom": "^17.0.1", 40 | "react-redux": "^7.2.2", 41 | "react-router-dom": "5.2.0", 42 | "redux": "^4.0.5", 43 | "redux-observable": "^1.2.0", 44 | "rxjs": "^6.5.5", 45 | "styled-components": "^5.2.1" 46 | }, 47 | "devDependencies": { 48 | "@babel/core": "^7.12.3", 49 | "@babel/preset-typescript": "^7.9.0", 50 | "@nrwl/cli": "^10.3.1", 51 | "@nrwl/cypress": "16.9.1", 52 | "@nrwl/eslint-plugin-nx": "10.3.2", 53 | "@nrwl/jest": "10.3.2", 54 | "@nrwl/react": "15.2.1", 55 | "@nrwl/storybook": "16.9.1", 56 | "@nrwl/web": "15.2.1", 57 | "@nrwl/workspace": "17.1.1", 58 | "@storybook/addon-knobs": "^6.0.28", 59 | "@storybook/react": "^8.6.12", 60 | "@testing-library/react": "^11.1.0", 61 | "@types/jest": "^26.0.15", 62 | "@types/node": "^14.14.6", 63 | "@types/react": "^16.9.55", 64 | "@types/react-dom": "^16.9.9", 65 | "@types/react-router-dom": "^5.1.6", 66 | "@types/styled-components": "^5.1.4", 67 | "@typescript-eslint/eslint-plugin": "^4.6.0", 68 | "@typescript-eslint/parser": "^4.6.0", 69 | "babel-loader": "8.1.0", 70 | "commitizen": "^4.2.5", 71 | "cypress": "^13.3.0", 72 | "dotenv": "8.2.0", 73 | "eslint": "^7.12.1", 74 | "eslint-config-prettier": "^6.15.0", 75 | "eslint-plugin-cypress": "^2.10.3", 76 | "eslint-plugin-import": "^2.22.1", 77 | "eslint-plugin-jsx-a11y": "^6.4.1", 78 | "eslint-plugin-react": "^7.21.5", 79 | "eslint-plugin-react-hooks": "^4.2.0", 80 | "jest": "^29.7.0", 81 | "prettier": "^2.1.2", 82 | "ts-jest": "^26.4.3", 83 | "ts-node": "^9.0.0", 84 | "tslint": "~6.1.2", 85 | "typescript": "^4.0.5" 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /apps/initiative-management/README.md: -------------------------------------------------------------------------------- 1 | 2 | # Initiative Management Software 3 | 4 | 🏢 Enterprise Corp™ 5 | 6 | ## The problem 7 | 8 | Enterprise Corp is not attracting enough React consulting opportunities. Enterprise Corp has been doing React consulting, but we have no way of distinguishing ourselves from our competitors. 9 | 10 | ## Goals 11 | 12 | - Establish ourselves as **React experts** in the developer community and with our clients 13 | - experts who can build and release scalable and maintainable React apps 14 | - experts who can help our clients release scalable and maintainable React apps 15 | - Generate **Qualified Sales Leads** (QSLs) for React projects and React related sales 16 | 17 | ## The solution 18 | 19 | A collection of React focused initiatives directed at achieving the stated goals: **Establishing ourselves as experts** and **generating QSLs**. 20 | 21 | > **Terms and Definitions used in this document** 22 | > 23 | > **Strategies**: An overall method of achieving our stated Goals 24 | > **Initiatives**: A collection of related projects and tasks that utilize strategies. 25 | > **Projects**: A collection of team members and tasks to be done in order to accomplish our goals 26 | > **Tasks**: An effort to be completed, usually assigned to a person or team as part of a project 27 | 28 | The general **strategies** to achieving the goals are: 29 | 30 | - Marketing: increase visibility in the developer community 31 | - Delivery: get recognized for doing amazing work on our client projects 32 | - Community: create a thriving community of engaged developers on our community slack 33 | 34 | Our **Marketing** strategy will help establish ourselves as React Experts in the developer community and open a wider net of sales prospects on social media from shared content. 35 | 36 | Our **Delivery** strategy will help establish ourselves as React Experts with our clients, and likely lead to QSLs by word of mouth. 37 | 38 | Our **Community** strategy is to create a closer relationship to a connected group of sales prospects and possibly generate QSLs from people who already trust us, know we are experts, and likely have already been assisted or impressed by us before 39 | 40 | There are 3 main initiatives at this time are: 41 | 42 | ### The Training Initiative 43 | 44 | We will create React training curriculum and content in various forms including, but not limited to, documentation, videos, guides, demo apps, exercises, and workshops all related to learning React and how to build large scale apps with React. 45 | 46 | We will also use this material internally to ensure we always have enough React experts to take on client React projects, increase the React expertise at Enterprise Corp, and ensure we are able to complete React projects on time and under budget. `(Delivery)` 47 | 48 | We will offer continuing development in React and React application development related skills to make sure our development process is modern and efficient. `(Delivery)` 49 | 50 | We also create online training material, such as guides and videos for the Enterprise Corp YouTube channel, egghead.io, Frontend Masters, etc. These will serve to increase our visibility in the developer community, establish ourselves as experts and be used as a vehicle to invite developers to our Enterprise Corp community. `(Marketing, Community)` 51 | 52 | In addition, we will offer a **live workshop** training service to clients who have front-end teams in place, that want to improve their skills with React and creating React applications. `(Delivery)` 53 | 54 | ### The Outreach Inititiave 55 | 56 | We will create blog posts, videos, and social media content about using React, new React tools, interesting patterns and techniques around building apps with React. This will serve to establish ourselves as experts in React and to have the name Enterprise Corp recognized as a source for React expertise. `(Marketing, Community)` 57 | 58 | We will speak or run workshops at conferences, speak as guests on podcasts or any other developer platform about React and React related topics to both network with possible prospects as well as establish ourselves as experts. `(Marketing, Community)` 59 | 60 | We will engage in traditional digital marketing methods such as increasing the SEO value of our React Services landing page, engage in influencer marketing and social media, campaign marketing or any other Brand Awareness tasks that will help establish us as experts and remove any friction from turning prospects into QSLs. `(Marketing)` 61 | 62 | We will maintain an Enterprise Corp community Discord channel and/or forum, where we will track and engage with community members. We wll assist community members with the use of our tools, gather feedback about our projects, promote and celebrate community member's contributions and look for high quality members which could be recruited to the Enterprise Corp team. `(Community)` 63 | 64 | We will try and leverage satisfied clients to create testimonials and endorsements to be used in our marketing material. `(Marketing)` 65 | 66 | ### The Tools Initiative 67 | 68 | We will create high quality tools, components, and libraries that will help developers create scalable and maintainable React applications. 69 | 70 | We will use these tools on our consultinig client projects where applicable. `(Delivery)` 71 | 72 | We will promote these tools in the general React community to help us establish ourselves as experts and possibly generate QSLs from companies that use the tools on their projects. `(Marketing, Community)` 73 | 74 | We will use the main site of these projects (GitHub Readme.md or whatever) to promote Enterprise Corp and offer support at the Enterprise Corp community slack/forum. `(Marketing, Community)` 75 | 76 | ## How to measure success 77 | 78 | #### Hours Billed 79 | 80 | The **primary** number to track success is the **amount of hours billed** brought in by any projects that use React (including: development, training, ...etc). 81 | 82 | **KPI**: Track billed hours and rates on any React related client project or training. 83 | 84 | #### QSLs received 85 | 86 | The **secondary** number to track success is the number of **QSLs received** that involve React based client projects. 87 | 88 | **KPI:** Track any QSLs for React based client projects or trainings. 89 | 90 | ### Indicators by strategy: 91 | 92 | #### Marketing: increase visibility in the developer community 93 | 94 | SEO numbers _(React Services landing page SEO)_ 95 | 96 | - Google Search Page Ranking 97 | - Click Throughs 98 | - Page Views 99 | 100 | Audience Reach _(e.g. spoke at conference 60 attendees, youtube video 3K views, ...etc)_ 101 | 102 | - Track approx. number of audience members for live events 103 | - Estimate reach of podcast listens / youtube views 104 | - social media numbers 105 | - track page views and likes/claps/kudos on blog posts 106 | 107 | Contact point tracking _(click through from blog post to contact form, mentioned "Rich gave me your email...", etc)_ 108 | 109 | - track any landing page contacts that came through a React blog/video/demo 110 | - track any "interesting people" you engage with at live events 111 | 112 | #### Delivery: get recognized for doing amazing work on our client projects 113 | 114 | Retention on projects using React 115 | 116 | Cumulative project health 117 | 118 | Recommendations / Testimonials / Client Satisfaction Surveys 119 | 120 | #### Community: create a thriving community of engaged developers on our community slack 121 | 122 | Number of active community members 123 | 124 | - Active members is defined by... TODO: define "active" member 125 | 126 | Engagement of community members ( active users, # of messages, ...etc) 127 | 128 | - Engagement is calculated by this algorithm... TODO: figure out this Engagement algorithm 129 | -------------------------------------------------------------------------------- /apps/tools-initiative/src/app/app.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import styled from 'styled-components'; 4 | 5 | import { ReactComponent as Logo } from './logo.svg'; 6 | import star from './star.svg'; 7 | 8 | import { Route, Link } from 'react-router-dom'; 9 | 10 | const StyledApp = styled.div` 11 | /* 12 | * Remove template code below 13 | */ 14 | 15 | font-family: sans-serif; 16 | min-width: 300px; 17 | max-width: 600px; 18 | margin: 50px auto; 19 | 20 | .gutter-left { 21 | margin-left: 9px; 22 | } 23 | 24 | .col-span-2 { 25 | grid-column: span 2; 26 | } 27 | 28 | .flex { 29 | display: flex; 30 | align-items: center; 31 | justify-content: center; 32 | } 33 | 34 | header { 35 | background-color: #143055; 36 | color: white; 37 | padding: 5px; 38 | border-radius: 3px; 39 | } 40 | 41 | main { 42 | padding: 0 36px; 43 | } 44 | 45 | p { 46 | text-align: center; 47 | } 48 | 49 | h1 { 50 | text-align: center; 51 | margin-left: 18px; 52 | font-size: 24px; 53 | } 54 | 55 | h2 { 56 | text-align: center; 57 | font-size: 20px; 58 | margin: 40px 0 10px 0; 59 | } 60 | 61 | .resources { 62 | text-align: center; 63 | list-style: none; 64 | padding: 0; 65 | display: grid; 66 | grid-gap: 9px; 67 | grid-template-columns: 1fr 1fr; 68 | } 69 | 70 | .resource { 71 | color: #0094ba; 72 | height: 36px; 73 | background-color: rgba(0, 0, 0, 0); 74 | border: 1px solid rgba(0, 0, 0, 0.12); 75 | border-radius: 4px; 76 | padding: 3px 9px; 77 | text-decoration: none; 78 | } 79 | 80 | .resource:hover { 81 | background-color: rgba(68, 138, 255, 0.04); 82 | } 83 | 84 | pre { 85 | padding: 9px; 86 | border-radius: 4px; 87 | background-color: black; 88 | color: #eee; 89 | } 90 | 91 | details { 92 | border-radius: 4px; 93 | color: #333; 94 | background-color: rgba(0, 0, 0, 0); 95 | border: 1px solid rgba(0, 0, 0, 0.12); 96 | padding: 3px 9px; 97 | margin-bottom: 9px; 98 | } 99 | 100 | summary { 101 | outline: none; 102 | height: 36px; 103 | line-height: 36px; 104 | } 105 | 106 | .github-star-container { 107 | margin-top: 12px; 108 | line-height: 20px; 109 | } 110 | 111 | .github-star-container a { 112 | display: flex; 113 | align-items: center; 114 | text-decoration: none; 115 | color: #333; 116 | } 117 | 118 | .github-star-badge { 119 | color: #24292e; 120 | display: flex; 121 | align-items: center; 122 | font-size: 12px; 123 | padding: 3px 10px; 124 | border: 1px solid rgba(27, 31, 35, 0.2); 125 | border-radius: 3px; 126 | background-image: linear-gradient(-180deg, #fafbfc, #eff3f6 90%); 127 | margin-left: 4px; 128 | font-weight: 600; 129 | } 130 | 131 | .github-star-badge:hover { 132 | background-image: linear-gradient(-180deg, #f0f3f6, #e6ebf1 90%); 133 | border-color: rgba(27, 31, 35, 0.35); 134 | background-position: -0.5em; 135 | } 136 | .github-star-badge .material-icons { 137 | height: 16px; 138 | width: 16px; 139 | margin-right: 4px; 140 | } 141 | `; 142 | 143 | export const App = () => { 144 | /* 145 | * Replace the elements below with your own. 146 | * 147 | * Note: The corresponding styles are in the ./app.styled-components file. 148 | */ 149 | return ( 150 | 151 |
152 | 153 |

Welcome to tools-initiative!

154 |
155 |
156 |

Resources & Tools

157 |

Thank you for using and showing some ♥ for Nx.

158 | 172 |

Here are some links to help you get started.

173 | 220 |

Next Steps

221 |

Here are some things you can do with Nx.

222 |
223 | Add UI library 224 |
{`# Generate UI lib
225 | nx g @nrwl/react:lib ui
226 | 
227 | # Add a component
228 | nx g @nrwl/react:component xyz --project ui`}
229 |
230 |
231 | View dependency graph 232 |
{`nx dep-graph`}
233 |
234 |
235 | Run affected commands 236 |
{`# see what's been affected by changes
237 | nx affected:dep-graph
238 | 
239 | # run tests for current changes
240 | nx affected:test
241 | 
242 | # run e2e tests for current changes
243 | nx affected:e2e
244 | `}
245 |
246 |
247 | 248 | {/* START: routes */} 249 | {/* These routes and navigation have been generated for you */} 250 | {/* Feel free to move and update them to fit your needs */} 251 |
252 |
253 |
254 |
255 |
    256 |
  • 257 | Home 258 |
  • 259 |
  • 260 | Page 2 261 |
  • 262 |
263 |
264 | ( 268 |
269 | This is the generated root route.{' '} 270 | Click here for page 2. 271 |
272 | )} 273 | /> 274 | ( 278 |
279 | Click here to go back to root page. 280 |
281 | )} 282 | /> 283 | {/* END: routes */} 284 |
285 | ); 286 | }; 287 | 288 | export default App; 289 | -------------------------------------------------------------------------------- /apps/outreach-initiative/src/app/app.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import styled from 'styled-components'; 4 | 5 | import { ReactComponent as Logo } from './logo.svg'; 6 | import star from './star.svg'; 7 | 8 | import { Route, Link } from 'react-router-dom'; 9 | 10 | const StyledApp = styled.div` 11 | /* 12 | * Remove template code below 13 | */ 14 | 15 | font-family: sans-serif; 16 | min-width: 300px; 17 | max-width: 600px; 18 | margin: 50px auto; 19 | 20 | .gutter-left { 21 | margin-left: 9px; 22 | } 23 | 24 | .col-span-2 { 25 | grid-column: span 2; 26 | } 27 | 28 | .flex { 29 | display: flex; 30 | align-items: center; 31 | justify-content: center; 32 | } 33 | 34 | header { 35 | background-color: #143055; 36 | color: white; 37 | padding: 5px; 38 | border-radius: 3px; 39 | } 40 | 41 | main { 42 | padding: 0 36px; 43 | } 44 | 45 | p { 46 | text-align: center; 47 | } 48 | 49 | h1 { 50 | text-align: center; 51 | margin-left: 18px; 52 | font-size: 24px; 53 | } 54 | 55 | h2 { 56 | text-align: center; 57 | font-size: 20px; 58 | margin: 40px 0 10px 0; 59 | } 60 | 61 | .resources { 62 | text-align: center; 63 | list-style: none; 64 | padding: 0; 65 | display: grid; 66 | grid-gap: 9px; 67 | grid-template-columns: 1fr 1fr; 68 | } 69 | 70 | .resource { 71 | color: #0094ba; 72 | height: 36px; 73 | background-color: rgba(0, 0, 0, 0); 74 | border: 1px solid rgba(0, 0, 0, 0.12); 75 | border-radius: 4px; 76 | padding: 3px 9px; 77 | text-decoration: none; 78 | } 79 | 80 | .resource:hover { 81 | background-color: rgba(68, 138, 255, 0.04); 82 | } 83 | 84 | pre { 85 | padding: 9px; 86 | border-radius: 4px; 87 | background-color: black; 88 | color: #eee; 89 | } 90 | 91 | details { 92 | border-radius: 4px; 93 | color: #333; 94 | background-color: rgba(0, 0, 0, 0); 95 | border: 1px solid rgba(0, 0, 0, 0.12); 96 | padding: 3px 9px; 97 | margin-bottom: 9px; 98 | } 99 | 100 | summary { 101 | outline: none; 102 | height: 36px; 103 | line-height: 36px; 104 | } 105 | 106 | .github-star-container { 107 | margin-top: 12px; 108 | line-height: 20px; 109 | } 110 | 111 | .github-star-container a { 112 | display: flex; 113 | align-items: center; 114 | text-decoration: none; 115 | color: #333; 116 | } 117 | 118 | .github-star-badge { 119 | color: #24292e; 120 | display: flex; 121 | align-items: center; 122 | font-size: 12px; 123 | padding: 3px 10px; 124 | border: 1px solid rgba(27, 31, 35, 0.2); 125 | border-radius: 3px; 126 | background-image: linear-gradient(-180deg, #fafbfc, #eff3f6 90%); 127 | margin-left: 4px; 128 | font-weight: 600; 129 | } 130 | 131 | .github-star-badge:hover { 132 | background-image: linear-gradient(-180deg, #f0f3f6, #e6ebf1 90%); 133 | border-color: rgba(27, 31, 35, 0.35); 134 | background-position: -0.5em; 135 | } 136 | .github-star-badge .material-icons { 137 | height: 16px; 138 | width: 16px; 139 | margin-right: 4px; 140 | } 141 | `; 142 | 143 | export const App = () => { 144 | /* 145 | * Replace the elements below with your own. 146 | * 147 | * Note: The corresponding styles are in the ./app.styled-components file. 148 | */ 149 | return ( 150 | 151 |
152 | 153 |

Welcome to outreach-initiative!

154 |
155 |
156 |

Resources & Tools

157 |

Thank you for using and showing some ♥ for Nx.

158 | 172 |

Here are some links to help you get started.

173 | 220 |

Next Steps

221 |

Here are some things you can do with Nx.

222 |
223 | Add UI library 224 |
{`# Generate UI lib
225 | nx g @nrwl/react:lib ui
226 | 
227 | # Add a component
228 | nx g @nrwl/react:component xyz --project ui`}
229 |
230 |
231 | View dependency graph 232 |
{`nx dep-graph`}
233 |
234 |
235 | Run affected commands 236 |
{`# see what's been affected by changes
237 | nx affected:dep-graph
238 | 
239 | # run tests for current changes
240 | nx affected:test
241 | 
242 | # run e2e tests for current changes
243 | nx affected:e2e
244 | `}
245 |
246 |
247 | 248 | {/* START: routes */} 249 | {/* These routes and navigation have been generated for you */} 250 | {/* Feel free to move and update them to fit your needs */} 251 |
252 |
253 |
254 |
255 |
    256 |
  • 257 | Home 258 |
  • 259 |
  • 260 | Page 2 261 |
  • 262 |
263 |
264 | ( 268 |
269 | This is the generated root route.{' '} 270 | Click here for page 2. 271 |
272 | )} 273 | /> 274 | ( 278 |
279 | Click here to go back to root page. 280 |
281 | )} 282 | /> 283 | {/* END: routes */} 284 |
285 | ); 286 | }; 287 | 288 | export default App; 289 | -------------------------------------------------------------------------------- /apps/training-initiative/src/app/app.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import styled from 'styled-components'; 4 | 5 | import { ReactComponent as Logo } from './logo.svg'; 6 | import star from './star.svg'; 7 | 8 | import { Route, Link } from 'react-router-dom'; 9 | 10 | const StyledApp = styled.div` 11 | /* 12 | * Remove template code below 13 | */ 14 | 15 | font-family: sans-serif; 16 | min-width: 300px; 17 | max-width: 600px; 18 | margin: 50px auto; 19 | 20 | .gutter-left { 21 | margin-left: 9px; 22 | } 23 | 24 | .col-span-2 { 25 | grid-column: span 2; 26 | } 27 | 28 | .flex { 29 | display: flex; 30 | align-items: center; 31 | justify-content: center; 32 | } 33 | 34 | header { 35 | background-color: #143055; 36 | color: white; 37 | padding: 5px; 38 | border-radius: 3px; 39 | } 40 | 41 | main { 42 | padding: 0 36px; 43 | } 44 | 45 | p { 46 | text-align: center; 47 | } 48 | 49 | h1 { 50 | text-align: center; 51 | margin-left: 18px; 52 | font-size: 24px; 53 | } 54 | 55 | h2 { 56 | text-align: center; 57 | font-size: 20px; 58 | margin: 40px 0 10px 0; 59 | } 60 | 61 | .resources { 62 | text-align: center; 63 | list-style: none; 64 | padding: 0; 65 | display: grid; 66 | grid-gap: 9px; 67 | grid-template-columns: 1fr 1fr; 68 | } 69 | 70 | .resource { 71 | color: #0094ba; 72 | height: 36px; 73 | background-color: rgba(0, 0, 0, 0); 74 | border: 1px solid rgba(0, 0, 0, 0.12); 75 | border-radius: 4px; 76 | padding: 3px 9px; 77 | text-decoration: none; 78 | } 79 | 80 | .resource:hover { 81 | background-color: rgba(68, 138, 255, 0.04); 82 | } 83 | 84 | pre { 85 | padding: 9px; 86 | border-radius: 4px; 87 | background-color: black; 88 | color: #eee; 89 | } 90 | 91 | details { 92 | border-radius: 4px; 93 | color: #333; 94 | background-color: rgba(0, 0, 0, 0); 95 | border: 1px solid rgba(0, 0, 0, 0.12); 96 | padding: 3px 9px; 97 | margin-bottom: 9px; 98 | } 99 | 100 | summary { 101 | outline: none; 102 | height: 36px; 103 | line-height: 36px; 104 | } 105 | 106 | .github-star-container { 107 | margin-top: 12px; 108 | line-height: 20px; 109 | } 110 | 111 | .github-star-container a { 112 | display: flex; 113 | align-items: center; 114 | text-decoration: none; 115 | color: #333; 116 | } 117 | 118 | .github-star-badge { 119 | color: #24292e; 120 | display: flex; 121 | align-items: center; 122 | font-size: 12px; 123 | padding: 3px 10px; 124 | border: 1px solid rgba(27, 31, 35, 0.2); 125 | border-radius: 3px; 126 | background-image: linear-gradient(-180deg, #fafbfc, #eff3f6 90%); 127 | margin-left: 4px; 128 | font-weight: 600; 129 | } 130 | 131 | .github-star-badge:hover { 132 | background-image: linear-gradient(-180deg, #f0f3f6, #e6ebf1 90%); 133 | border-color: rgba(27, 31, 35, 0.35); 134 | background-position: -0.5em; 135 | } 136 | .github-star-badge .material-icons { 137 | height: 16px; 138 | width: 16px; 139 | margin-right: 4px; 140 | } 141 | `; 142 | 143 | export const App = () => { 144 | /* 145 | * Replace the elements below with your own. 146 | * 147 | * Note: The corresponding styles are in the ./app.styled-components file. 148 | */ 149 | return ( 150 | 151 |
152 | 153 |

Welcome to training-initiative!

154 |
155 |
156 |

Resources & Tools

157 |

Thank you for using and showing some ♥ for Nx.

158 | 172 |

Here are some links to help you get started.

173 | 220 |

Next Steps

221 |

Here are some things you can do with Nx.

222 |
223 | Add UI library 224 |
{`# Generate UI lib
225 | nx g @nrwl/react:lib ui
226 | 
227 | # Add a component
228 | nx g @nrwl/react:component xyz --project ui`}
229 |
230 |
231 | View dependency graph 232 |
{`nx dep-graph`}
233 |
234 |
235 | Run affected commands 236 |
{`# see what's been affected by changes
237 | nx affected:dep-graph
238 | 
239 | # run tests for current changes
240 | nx affected:test
241 | 
242 | # run e2e tests for current changes
243 | nx affected:e2e
244 | `}
245 |
246 |
247 | 248 | {/* START: routes */} 249 | {/* These routes and navigation have been generated for you */} 250 | {/* Feel free to move and update them to fit your needs */} 251 |
252 |
253 |
254 |
255 |
    256 |
  • 257 | Home 258 |
  • 259 |
  • 260 | Page 2 261 |
  • 262 |
263 |
264 | ( 268 |
269 | This is the generated root route.{' '} 270 | Click here for page 2. 271 |
272 | )} 273 | /> 274 | ( 278 |
279 | Click here to go back to root page. 280 |
281 | )} 282 | /> 283 | {/* END: routes */} 284 |
285 | ); 286 | }; 287 | 288 | export default App; 289 | -------------------------------------------------------------------------------- /libs/design-system/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "commonjs": true, 5 | "es6": true, 6 | "jest": true, 7 | "node": true 8 | }, 9 | "settings": { "react": { "version": "detect" } }, 10 | "plugins": ["import", "jsx-a11y", "react", "react-hooks"], 11 | "rules": { 12 | "array-callback-return": "warn", 13 | "dot-location": ["warn", "property"], 14 | "eqeqeq": ["warn", "smart"], 15 | "new-parens": "warn", 16 | "no-caller": "warn", 17 | "no-cond-assign": ["warn", "except-parens"], 18 | "no-const-assign": "warn", 19 | "no-control-regex": "warn", 20 | "no-delete-var": "warn", 21 | "no-dupe-args": "warn", 22 | "no-dupe-keys": "warn", 23 | "no-duplicate-case": "warn", 24 | "no-empty-character-class": "warn", 25 | "no-empty-pattern": "warn", 26 | "no-eval": "warn", 27 | "no-ex-assign": "warn", 28 | "no-extend-native": "warn", 29 | "no-extra-bind": "warn", 30 | "no-extra-label": "warn", 31 | "no-fallthrough": "warn", 32 | "no-func-assign": "warn", 33 | "no-implied-eval": "warn", 34 | "no-invalid-regexp": "warn", 35 | "no-iterator": "warn", 36 | "no-label-var": "warn", 37 | "no-labels": ["warn", { "allowLoop": true, "allowSwitch": false }], 38 | "no-lone-blocks": "warn", 39 | "no-loop-func": "warn", 40 | "no-mixed-operators": [ 41 | "warn", 42 | { 43 | "groups": [ 44 | ["&", "|", "^", "~", "<<", ">>", ">>>"], 45 | ["==", "!=", "===", "!==", ">", ">=", "<", "<="], 46 | ["&&", "||"], 47 | ["in", "instanceof"] 48 | ], 49 | "allowSamePrecedence": false 50 | } 51 | ], 52 | "no-multi-str": "warn", 53 | "no-native-reassign": "warn", 54 | "no-negated-in-lhs": "warn", 55 | "no-new-func": "warn", 56 | "no-new-object": "warn", 57 | "no-new-symbol": "warn", 58 | "no-new-wrappers": "warn", 59 | "no-obj-calls": "warn", 60 | "no-octal": "warn", 61 | "no-octal-escape": "warn", 62 | "no-redeclare": "warn", 63 | "no-regex-spaces": "warn", 64 | "no-restricted-syntax": ["warn", "WithStatement"], 65 | "no-script-url": "warn", 66 | "no-self-assign": "warn", 67 | "no-self-compare": "warn", 68 | "no-sequences": "warn", 69 | "no-shadow-restricted-names": "warn", 70 | "no-sparse-arrays": "warn", 71 | "no-template-curly-in-string": "warn", 72 | "no-this-before-super": "warn", 73 | "no-throw-literal": "warn", 74 | "no-restricted-globals": [ 75 | "error", 76 | "addEventListener", 77 | "blur", 78 | "close", 79 | "closed", 80 | "confirm", 81 | "defaultStatus", 82 | "defaultstatus", 83 | "event", 84 | "external", 85 | "find", 86 | "focus", 87 | "frameElement", 88 | "frames", 89 | "history", 90 | "innerHeight", 91 | "innerWidth", 92 | "length", 93 | "location", 94 | "locationbar", 95 | "menubar", 96 | "moveBy", 97 | "moveTo", 98 | "name", 99 | "onblur", 100 | "onerror", 101 | "onfocus", 102 | "onload", 103 | "onresize", 104 | "onunload", 105 | "open", 106 | "opener", 107 | "opera", 108 | "outerHeight", 109 | "outerWidth", 110 | "pageXOffset", 111 | "pageYOffset", 112 | "parent", 113 | "print", 114 | "removeEventListener", 115 | "resizeBy", 116 | "resizeTo", 117 | "screen", 118 | "screenLeft", 119 | "screenTop", 120 | "screenX", 121 | "screenY", 122 | "scroll", 123 | "scrollbars", 124 | "scrollBy", 125 | "scrollTo", 126 | "scrollX", 127 | "scrollY", 128 | "self", 129 | "status", 130 | "statusbar", 131 | "stop", 132 | "toolbar", 133 | "top" 134 | ], 135 | "no-unexpected-multiline": "warn", 136 | "no-unreachable": "warn", 137 | "no-unused-expressions": [ 138 | "error", 139 | { 140 | "allowShortCircuit": true, 141 | "allowTernary": true, 142 | "allowTaggedTemplates": true 143 | } 144 | ], 145 | "no-unused-labels": "warn", 146 | "no-useless-computed-key": "warn", 147 | "no-useless-concat": "warn", 148 | "no-useless-escape": "warn", 149 | "no-useless-rename": [ 150 | "warn", 151 | { 152 | "ignoreDestructuring": false, 153 | "ignoreImport": false, 154 | "ignoreExport": false 155 | } 156 | ], 157 | "no-with": "warn", 158 | "no-whitespace-before-property": "warn", 159 | "react-hooks/exhaustive-deps": "warn", 160 | "require-yield": "warn", 161 | "rest-spread-spacing": ["warn", "never"], 162 | "strict": ["warn", "never"], 163 | "unicode-bom": ["warn", "never"], 164 | "use-isnan": "warn", 165 | "valid-typeof": "warn", 166 | "no-restricted-properties": [ 167 | "error", 168 | { 169 | "object": "require", 170 | "property": "ensure", 171 | "message": "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting" 172 | }, 173 | { 174 | "object": "System", 175 | "property": "import", 176 | "message": "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting" 177 | } 178 | ], 179 | "getter-return": "warn", 180 | "import/first": "error", 181 | "import/no-amd": "error", 182 | "import/no-webpack-loader-syntax": "error", 183 | "react/forbid-foreign-prop-types": ["warn", { "allowInPropTypes": true }], 184 | "react/jsx-no-comment-textnodes": "warn", 185 | "react/jsx-no-duplicate-props": "warn", 186 | "react/jsx-no-target-blank": "warn", 187 | "react/jsx-no-undef": "error", 188 | "react/jsx-pascal-case": ["warn", { "allowAllCaps": true, "ignore": [] }], 189 | "react/jsx-uses-react": "warn", 190 | "react/jsx-uses-vars": "warn", 191 | "react/no-danger-with-children": "warn", 192 | "react/no-direct-mutation-state": "warn", 193 | "react/no-is-mounted": "warn", 194 | "react/no-typos": "error", 195 | "react/react-in-jsx-scope": "error", 196 | "react/require-render-return": "error", 197 | "react/style-prop-object": "warn", 198 | "jsx-a11y/accessible-emoji": "warn", 199 | "jsx-a11y/alt-text": "warn", 200 | "jsx-a11y/anchor-has-content": "warn", 201 | "jsx-a11y/anchor-is-valid": [ 202 | "warn", 203 | { "aspects": ["noHref", "invalidHref"] } 204 | ], 205 | "jsx-a11y/aria-activedescendant-has-tabindex": "warn", 206 | "jsx-a11y/aria-props": "warn", 207 | "jsx-a11y/aria-proptypes": "warn", 208 | "jsx-a11y/aria-role": "warn", 209 | "jsx-a11y/aria-unsupported-elements": "warn", 210 | "jsx-a11y/heading-has-content": "warn", 211 | "jsx-a11y/iframe-has-title": "warn", 212 | "jsx-a11y/img-redundant-alt": "warn", 213 | "jsx-a11y/no-access-key": "warn", 214 | "jsx-a11y/no-distracting-elements": "warn", 215 | "jsx-a11y/no-redundant-roles": "warn", 216 | "jsx-a11y/role-has-required-aria-props": "warn", 217 | "jsx-a11y/role-supports-aria-props": "warn", 218 | "jsx-a11y/scope": "warn", 219 | "react-hooks/rules-of-hooks": "error", 220 | "default-case": "off", 221 | "no-dupe-class-members": "off", 222 | "no-undef": "off", 223 | "@typescript-eslint/consistent-type-assertions": "warn", 224 | "no-array-constructor": "off", 225 | "@typescript-eslint/no-array-constructor": "warn", 226 | "@typescript-eslint/no-namespace": "error", 227 | "no-use-before-define": "off", 228 | "@typescript-eslint/no-use-before-define": [ 229 | "warn", 230 | { 231 | "functions": false, 232 | "classes": false, 233 | "variables": false, 234 | "typedefs": false 235 | } 236 | ], 237 | "no-unused-vars": "off", 238 | "@typescript-eslint/no-unused-vars": [ 239 | "warn", 240 | { "args": "none", "ignoreRestSiblings": true } 241 | ], 242 | "no-useless-constructor": "off", 243 | "@typescript-eslint/no-useless-constructor": "warn" 244 | }, 245 | "extends": ["../../.eslintrc"], 246 | "ignorePatterns": ["!**/*"] 247 | } 248 | -------------------------------------------------------------------------------- /apps/tools-initiative/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "commonjs": true, 5 | "es6": true, 6 | "jest": true, 7 | "node": true 8 | }, 9 | "settings": { "react": { "version": "detect" } }, 10 | "plugins": ["import", "jsx-a11y", "react", "react-hooks"], 11 | "rules": { 12 | "array-callback-return": "warn", 13 | "dot-location": ["warn", "property"], 14 | "eqeqeq": ["warn", "smart"], 15 | "new-parens": "warn", 16 | "no-caller": "warn", 17 | "no-cond-assign": ["warn", "except-parens"], 18 | "no-const-assign": "warn", 19 | "no-control-regex": "warn", 20 | "no-delete-var": "warn", 21 | "no-dupe-args": "warn", 22 | "no-dupe-keys": "warn", 23 | "no-duplicate-case": "warn", 24 | "no-empty-character-class": "warn", 25 | "no-empty-pattern": "warn", 26 | "no-eval": "warn", 27 | "no-ex-assign": "warn", 28 | "no-extend-native": "warn", 29 | "no-extra-bind": "warn", 30 | "no-extra-label": "warn", 31 | "no-fallthrough": "warn", 32 | "no-func-assign": "warn", 33 | "no-implied-eval": "warn", 34 | "no-invalid-regexp": "warn", 35 | "no-iterator": "warn", 36 | "no-label-var": "warn", 37 | "no-labels": ["warn", { "allowLoop": true, "allowSwitch": false }], 38 | "no-lone-blocks": "warn", 39 | "no-loop-func": "warn", 40 | "no-mixed-operators": [ 41 | "warn", 42 | { 43 | "groups": [ 44 | ["&", "|", "^", "~", "<<", ">>", ">>>"], 45 | ["==", "!=", "===", "!==", ">", ">=", "<", "<="], 46 | ["&&", "||"], 47 | ["in", "instanceof"] 48 | ], 49 | "allowSamePrecedence": false 50 | } 51 | ], 52 | "no-multi-str": "warn", 53 | "no-native-reassign": "warn", 54 | "no-negated-in-lhs": "warn", 55 | "no-new-func": "warn", 56 | "no-new-object": "warn", 57 | "no-new-symbol": "warn", 58 | "no-new-wrappers": "warn", 59 | "no-obj-calls": "warn", 60 | "no-octal": "warn", 61 | "no-octal-escape": "warn", 62 | "no-redeclare": "warn", 63 | "no-regex-spaces": "warn", 64 | "no-restricted-syntax": ["warn", "WithStatement"], 65 | "no-script-url": "warn", 66 | "no-self-assign": "warn", 67 | "no-self-compare": "warn", 68 | "no-sequences": "warn", 69 | "no-shadow-restricted-names": "warn", 70 | "no-sparse-arrays": "warn", 71 | "no-template-curly-in-string": "warn", 72 | "no-this-before-super": "warn", 73 | "no-throw-literal": "warn", 74 | "no-restricted-globals": [ 75 | "error", 76 | "addEventListener", 77 | "blur", 78 | "close", 79 | "closed", 80 | "confirm", 81 | "defaultStatus", 82 | "defaultstatus", 83 | "event", 84 | "external", 85 | "find", 86 | "focus", 87 | "frameElement", 88 | "frames", 89 | "history", 90 | "innerHeight", 91 | "innerWidth", 92 | "length", 93 | "location", 94 | "locationbar", 95 | "menubar", 96 | "moveBy", 97 | "moveTo", 98 | "name", 99 | "onblur", 100 | "onerror", 101 | "onfocus", 102 | "onload", 103 | "onresize", 104 | "onunload", 105 | "open", 106 | "opener", 107 | "opera", 108 | "outerHeight", 109 | "outerWidth", 110 | "pageXOffset", 111 | "pageYOffset", 112 | "parent", 113 | "print", 114 | "removeEventListener", 115 | "resizeBy", 116 | "resizeTo", 117 | "screen", 118 | "screenLeft", 119 | "screenTop", 120 | "screenX", 121 | "screenY", 122 | "scroll", 123 | "scrollbars", 124 | "scrollBy", 125 | "scrollTo", 126 | "scrollX", 127 | "scrollY", 128 | "self", 129 | "status", 130 | "statusbar", 131 | "stop", 132 | "toolbar", 133 | "top" 134 | ], 135 | "no-unexpected-multiline": "warn", 136 | "no-unreachable": "warn", 137 | "no-unused-expressions": [ 138 | "error", 139 | { 140 | "allowShortCircuit": true, 141 | "allowTernary": true, 142 | "allowTaggedTemplates": true 143 | } 144 | ], 145 | "no-unused-labels": "warn", 146 | "no-useless-computed-key": "warn", 147 | "no-useless-concat": "warn", 148 | "no-useless-escape": "warn", 149 | "no-useless-rename": [ 150 | "warn", 151 | { 152 | "ignoreDestructuring": false, 153 | "ignoreImport": false, 154 | "ignoreExport": false 155 | } 156 | ], 157 | "no-with": "warn", 158 | "no-whitespace-before-property": "warn", 159 | "react-hooks/exhaustive-deps": "warn", 160 | "require-yield": "warn", 161 | "rest-spread-spacing": ["warn", "never"], 162 | "strict": ["warn", "never"], 163 | "unicode-bom": ["warn", "never"], 164 | "use-isnan": "warn", 165 | "valid-typeof": "warn", 166 | "no-restricted-properties": [ 167 | "error", 168 | { 169 | "object": "require", 170 | "property": "ensure", 171 | "message": "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting" 172 | }, 173 | { 174 | "object": "System", 175 | "property": "import", 176 | "message": "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting" 177 | } 178 | ], 179 | "getter-return": "warn", 180 | "import/first": "error", 181 | "import/no-amd": "error", 182 | "import/no-webpack-loader-syntax": "error", 183 | "react/forbid-foreign-prop-types": ["warn", { "allowInPropTypes": true }], 184 | "react/jsx-no-comment-textnodes": "warn", 185 | "react/jsx-no-duplicate-props": "warn", 186 | "react/jsx-no-target-blank": "warn", 187 | "react/jsx-no-undef": "error", 188 | "react/jsx-pascal-case": ["warn", { "allowAllCaps": true, "ignore": [] }], 189 | "react/jsx-uses-react": "warn", 190 | "react/jsx-uses-vars": "warn", 191 | "react/no-danger-with-children": "warn", 192 | "react/no-direct-mutation-state": "warn", 193 | "react/no-is-mounted": "warn", 194 | "react/no-typos": "error", 195 | "react/react-in-jsx-scope": "error", 196 | "react/require-render-return": "error", 197 | "react/style-prop-object": "warn", 198 | "jsx-a11y/accessible-emoji": "warn", 199 | "jsx-a11y/alt-text": "warn", 200 | "jsx-a11y/anchor-has-content": "warn", 201 | "jsx-a11y/anchor-is-valid": [ 202 | "warn", 203 | { "aspects": ["noHref", "invalidHref"] } 204 | ], 205 | "jsx-a11y/aria-activedescendant-has-tabindex": "warn", 206 | "jsx-a11y/aria-props": "warn", 207 | "jsx-a11y/aria-proptypes": "warn", 208 | "jsx-a11y/aria-role": "warn", 209 | "jsx-a11y/aria-unsupported-elements": "warn", 210 | "jsx-a11y/heading-has-content": "warn", 211 | "jsx-a11y/iframe-has-title": "warn", 212 | "jsx-a11y/img-redundant-alt": "warn", 213 | "jsx-a11y/no-access-key": "warn", 214 | "jsx-a11y/no-distracting-elements": "warn", 215 | "jsx-a11y/no-redundant-roles": "warn", 216 | "jsx-a11y/role-has-required-aria-props": "warn", 217 | "jsx-a11y/role-supports-aria-props": "warn", 218 | "jsx-a11y/scope": "warn", 219 | "react-hooks/rules-of-hooks": "error", 220 | "default-case": "off", 221 | "no-dupe-class-members": "off", 222 | "no-undef": "off", 223 | "@typescript-eslint/consistent-type-assertions": "warn", 224 | "no-array-constructor": "off", 225 | "@typescript-eslint/no-array-constructor": "warn", 226 | "@typescript-eslint/no-namespace": "error", 227 | "no-use-before-define": "off", 228 | "@typescript-eslint/no-use-before-define": [ 229 | "warn", 230 | { 231 | "functions": false, 232 | "classes": false, 233 | "variables": false, 234 | "typedefs": false 235 | } 236 | ], 237 | "no-unused-vars": "off", 238 | "@typescript-eslint/no-unused-vars": [ 239 | "warn", 240 | { "args": "none", "ignoreRestSiblings": true } 241 | ], 242 | "no-useless-constructor": "off", 243 | "@typescript-eslint/no-useless-constructor": "warn" 244 | }, 245 | "extends": ["../../.eslintrc"], 246 | "ignorePatterns": ["!**/*"] 247 | } 248 | -------------------------------------------------------------------------------- /apps/training-initiative/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "commonjs": true, 5 | "es6": true, 6 | "jest": true, 7 | "node": true 8 | }, 9 | "settings": { "react": { "version": "detect" } }, 10 | "plugins": ["import", "jsx-a11y", "react", "react-hooks"], 11 | "rules": { 12 | "array-callback-return": "warn", 13 | "dot-location": ["warn", "property"], 14 | "eqeqeq": ["warn", "smart"], 15 | "new-parens": "warn", 16 | "no-caller": "warn", 17 | "no-cond-assign": ["warn", "except-parens"], 18 | "no-const-assign": "warn", 19 | "no-control-regex": "warn", 20 | "no-delete-var": "warn", 21 | "no-dupe-args": "warn", 22 | "no-dupe-keys": "warn", 23 | "no-duplicate-case": "warn", 24 | "no-empty-character-class": "warn", 25 | "no-empty-pattern": "warn", 26 | "no-eval": "warn", 27 | "no-ex-assign": "warn", 28 | "no-extend-native": "warn", 29 | "no-extra-bind": "warn", 30 | "no-extra-label": "warn", 31 | "no-fallthrough": "warn", 32 | "no-func-assign": "warn", 33 | "no-implied-eval": "warn", 34 | "no-invalid-regexp": "warn", 35 | "no-iterator": "warn", 36 | "no-label-var": "warn", 37 | "no-labels": ["warn", { "allowLoop": true, "allowSwitch": false }], 38 | "no-lone-blocks": "warn", 39 | "no-loop-func": "warn", 40 | "no-mixed-operators": [ 41 | "warn", 42 | { 43 | "groups": [ 44 | ["&", "|", "^", "~", "<<", ">>", ">>>"], 45 | ["==", "!=", "===", "!==", ">", ">=", "<", "<="], 46 | ["&&", "||"], 47 | ["in", "instanceof"] 48 | ], 49 | "allowSamePrecedence": false 50 | } 51 | ], 52 | "no-multi-str": "warn", 53 | "no-native-reassign": "warn", 54 | "no-negated-in-lhs": "warn", 55 | "no-new-func": "warn", 56 | "no-new-object": "warn", 57 | "no-new-symbol": "warn", 58 | "no-new-wrappers": "warn", 59 | "no-obj-calls": "warn", 60 | "no-octal": "warn", 61 | "no-octal-escape": "warn", 62 | "no-redeclare": "warn", 63 | "no-regex-spaces": "warn", 64 | "no-restricted-syntax": ["warn", "WithStatement"], 65 | "no-script-url": "warn", 66 | "no-self-assign": "warn", 67 | "no-self-compare": "warn", 68 | "no-sequences": "warn", 69 | "no-shadow-restricted-names": "warn", 70 | "no-sparse-arrays": "warn", 71 | "no-template-curly-in-string": "warn", 72 | "no-this-before-super": "warn", 73 | "no-throw-literal": "warn", 74 | "no-restricted-globals": [ 75 | "error", 76 | "addEventListener", 77 | "blur", 78 | "close", 79 | "closed", 80 | "confirm", 81 | "defaultStatus", 82 | "defaultstatus", 83 | "event", 84 | "external", 85 | "find", 86 | "focus", 87 | "frameElement", 88 | "frames", 89 | "history", 90 | "innerHeight", 91 | "innerWidth", 92 | "length", 93 | "location", 94 | "locationbar", 95 | "menubar", 96 | "moveBy", 97 | "moveTo", 98 | "name", 99 | "onblur", 100 | "onerror", 101 | "onfocus", 102 | "onload", 103 | "onresize", 104 | "onunload", 105 | "open", 106 | "opener", 107 | "opera", 108 | "outerHeight", 109 | "outerWidth", 110 | "pageXOffset", 111 | "pageYOffset", 112 | "parent", 113 | "print", 114 | "removeEventListener", 115 | "resizeBy", 116 | "resizeTo", 117 | "screen", 118 | "screenLeft", 119 | "screenTop", 120 | "screenX", 121 | "screenY", 122 | "scroll", 123 | "scrollbars", 124 | "scrollBy", 125 | "scrollTo", 126 | "scrollX", 127 | "scrollY", 128 | "self", 129 | "status", 130 | "statusbar", 131 | "stop", 132 | "toolbar", 133 | "top" 134 | ], 135 | "no-unexpected-multiline": "warn", 136 | "no-unreachable": "warn", 137 | "no-unused-expressions": [ 138 | "error", 139 | { 140 | "allowShortCircuit": true, 141 | "allowTernary": true, 142 | "allowTaggedTemplates": true 143 | } 144 | ], 145 | "no-unused-labels": "warn", 146 | "no-useless-computed-key": "warn", 147 | "no-useless-concat": "warn", 148 | "no-useless-escape": "warn", 149 | "no-useless-rename": [ 150 | "warn", 151 | { 152 | "ignoreDestructuring": false, 153 | "ignoreImport": false, 154 | "ignoreExport": false 155 | } 156 | ], 157 | "no-with": "warn", 158 | "no-whitespace-before-property": "warn", 159 | "react-hooks/exhaustive-deps": "warn", 160 | "require-yield": "warn", 161 | "rest-spread-spacing": ["warn", "never"], 162 | "strict": ["warn", "never"], 163 | "unicode-bom": ["warn", "never"], 164 | "use-isnan": "warn", 165 | "valid-typeof": "warn", 166 | "no-restricted-properties": [ 167 | "error", 168 | { 169 | "object": "require", 170 | "property": "ensure", 171 | "message": "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting" 172 | }, 173 | { 174 | "object": "System", 175 | "property": "import", 176 | "message": "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting" 177 | } 178 | ], 179 | "getter-return": "warn", 180 | "import/first": "error", 181 | "import/no-amd": "error", 182 | "import/no-webpack-loader-syntax": "error", 183 | "react/forbid-foreign-prop-types": ["warn", { "allowInPropTypes": true }], 184 | "react/jsx-no-comment-textnodes": "warn", 185 | "react/jsx-no-duplicate-props": "warn", 186 | "react/jsx-no-target-blank": "warn", 187 | "react/jsx-no-undef": "error", 188 | "react/jsx-pascal-case": ["warn", { "allowAllCaps": true, "ignore": [] }], 189 | "react/jsx-uses-react": "warn", 190 | "react/jsx-uses-vars": "warn", 191 | "react/no-danger-with-children": "warn", 192 | "react/no-direct-mutation-state": "warn", 193 | "react/no-is-mounted": "warn", 194 | "react/no-typos": "error", 195 | "react/react-in-jsx-scope": "error", 196 | "react/require-render-return": "error", 197 | "react/style-prop-object": "warn", 198 | "jsx-a11y/accessible-emoji": "warn", 199 | "jsx-a11y/alt-text": "warn", 200 | "jsx-a11y/anchor-has-content": "warn", 201 | "jsx-a11y/anchor-is-valid": [ 202 | "warn", 203 | { "aspects": ["noHref", "invalidHref"] } 204 | ], 205 | "jsx-a11y/aria-activedescendant-has-tabindex": "warn", 206 | "jsx-a11y/aria-props": "warn", 207 | "jsx-a11y/aria-proptypes": "warn", 208 | "jsx-a11y/aria-role": "warn", 209 | "jsx-a11y/aria-unsupported-elements": "warn", 210 | "jsx-a11y/heading-has-content": "warn", 211 | "jsx-a11y/iframe-has-title": "warn", 212 | "jsx-a11y/img-redundant-alt": "warn", 213 | "jsx-a11y/no-access-key": "warn", 214 | "jsx-a11y/no-distracting-elements": "warn", 215 | "jsx-a11y/no-redundant-roles": "warn", 216 | "jsx-a11y/role-has-required-aria-props": "warn", 217 | "jsx-a11y/role-supports-aria-props": "warn", 218 | "jsx-a11y/scope": "warn", 219 | "react-hooks/rules-of-hooks": "error", 220 | "default-case": "off", 221 | "no-dupe-class-members": "off", 222 | "no-undef": "off", 223 | "@typescript-eslint/consistent-type-assertions": "warn", 224 | "no-array-constructor": "off", 225 | "@typescript-eslint/no-array-constructor": "warn", 226 | "@typescript-eslint/no-namespace": "error", 227 | "no-use-before-define": "off", 228 | "@typescript-eslint/no-use-before-define": [ 229 | "warn", 230 | { 231 | "functions": false, 232 | "classes": false, 233 | "variables": false, 234 | "typedefs": false 235 | } 236 | ], 237 | "no-unused-vars": "off", 238 | "@typescript-eslint/no-unused-vars": [ 239 | "warn", 240 | { "args": "none", "ignoreRestSiblings": true } 241 | ], 242 | "no-useless-constructor": "off", 243 | "@typescript-eslint/no-useless-constructor": "warn" 244 | }, 245 | "extends": ["../../.eslintrc"], 246 | "ignorePatterns": ["!**/*"] 247 | } 248 | -------------------------------------------------------------------------------- /apps/initiative-management/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "commonjs": true, 5 | "es6": true, 6 | "jest": true, 7 | "node": true 8 | }, 9 | "settings": { "react": { "version": "detect" } }, 10 | "plugins": ["import", "jsx-a11y", "react", "react-hooks"], 11 | "rules": { 12 | "array-callback-return": "warn", 13 | "dot-location": ["warn", "property"], 14 | "eqeqeq": ["warn", "smart"], 15 | "new-parens": "warn", 16 | "no-caller": "warn", 17 | "no-cond-assign": ["warn", "except-parens"], 18 | "no-const-assign": "warn", 19 | "no-control-regex": "warn", 20 | "no-delete-var": "warn", 21 | "no-dupe-args": "warn", 22 | "no-dupe-keys": "warn", 23 | "no-duplicate-case": "warn", 24 | "no-empty-character-class": "warn", 25 | "no-empty-pattern": "warn", 26 | "no-eval": "warn", 27 | "no-ex-assign": "warn", 28 | "no-extend-native": "warn", 29 | "no-extra-bind": "warn", 30 | "no-extra-label": "warn", 31 | "no-fallthrough": "warn", 32 | "no-func-assign": "warn", 33 | "no-implied-eval": "warn", 34 | "no-invalid-regexp": "warn", 35 | "no-iterator": "warn", 36 | "no-label-var": "warn", 37 | "no-labels": ["warn", { "allowLoop": true, "allowSwitch": false }], 38 | "no-lone-blocks": "warn", 39 | "no-loop-func": "warn", 40 | "no-mixed-operators": [ 41 | "warn", 42 | { 43 | "groups": [ 44 | ["&", "|", "^", "~", "<<", ">>", ">>>"], 45 | ["==", "!=", "===", "!==", ">", ">=", "<", "<="], 46 | ["&&", "||"], 47 | ["in", "instanceof"] 48 | ], 49 | "allowSamePrecedence": false 50 | } 51 | ], 52 | "no-multi-str": "warn", 53 | "no-native-reassign": "warn", 54 | "no-negated-in-lhs": "warn", 55 | "no-new-func": "warn", 56 | "no-new-object": "warn", 57 | "no-new-symbol": "warn", 58 | "no-new-wrappers": "warn", 59 | "no-obj-calls": "warn", 60 | "no-octal": "warn", 61 | "no-octal-escape": "warn", 62 | "no-redeclare": "warn", 63 | "no-regex-spaces": "warn", 64 | "no-restricted-syntax": ["warn", "WithStatement"], 65 | "no-script-url": "warn", 66 | "no-self-assign": "warn", 67 | "no-self-compare": "warn", 68 | "no-sequences": "warn", 69 | "no-shadow-restricted-names": "warn", 70 | "no-sparse-arrays": "warn", 71 | "no-template-curly-in-string": "warn", 72 | "no-this-before-super": "warn", 73 | "no-throw-literal": "warn", 74 | "no-restricted-globals": [ 75 | "error", 76 | "addEventListener", 77 | "blur", 78 | "close", 79 | "closed", 80 | "confirm", 81 | "defaultStatus", 82 | "defaultstatus", 83 | "event", 84 | "external", 85 | "find", 86 | "focus", 87 | "frameElement", 88 | "frames", 89 | "history", 90 | "innerHeight", 91 | "innerWidth", 92 | "length", 93 | "location", 94 | "locationbar", 95 | "menubar", 96 | "moveBy", 97 | "moveTo", 98 | "name", 99 | "onblur", 100 | "onerror", 101 | "onfocus", 102 | "onload", 103 | "onresize", 104 | "onunload", 105 | "open", 106 | "opener", 107 | "opera", 108 | "outerHeight", 109 | "outerWidth", 110 | "pageXOffset", 111 | "pageYOffset", 112 | "parent", 113 | "print", 114 | "removeEventListener", 115 | "resizeBy", 116 | "resizeTo", 117 | "screen", 118 | "screenLeft", 119 | "screenTop", 120 | "screenX", 121 | "screenY", 122 | "scroll", 123 | "scrollbars", 124 | "scrollBy", 125 | "scrollTo", 126 | "scrollX", 127 | "scrollY", 128 | "self", 129 | "status", 130 | "statusbar", 131 | "stop", 132 | "toolbar", 133 | "top" 134 | ], 135 | "no-unexpected-multiline": "warn", 136 | "no-unreachable": "warn", 137 | "no-unused-expressions": [ 138 | "error", 139 | { 140 | "allowShortCircuit": true, 141 | "allowTernary": true, 142 | "allowTaggedTemplates": true 143 | } 144 | ], 145 | "no-unused-labels": "warn", 146 | "no-useless-computed-key": "warn", 147 | "no-useless-concat": "warn", 148 | "no-useless-escape": "warn", 149 | "no-useless-rename": [ 150 | "warn", 151 | { 152 | "ignoreDestructuring": false, 153 | "ignoreImport": false, 154 | "ignoreExport": false 155 | } 156 | ], 157 | "no-with": "warn", 158 | "no-whitespace-before-property": "warn", 159 | "react-hooks/exhaustive-deps": "warn", 160 | "require-yield": "warn", 161 | "rest-spread-spacing": ["warn", "never"], 162 | "strict": ["warn", "never"], 163 | "unicode-bom": ["warn", "never"], 164 | "use-isnan": "warn", 165 | "valid-typeof": "warn", 166 | "no-restricted-properties": [ 167 | "error", 168 | { 169 | "object": "require", 170 | "property": "ensure", 171 | "message": "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting" 172 | }, 173 | { 174 | "object": "System", 175 | "property": "import", 176 | "message": "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting" 177 | } 178 | ], 179 | "getter-return": "warn", 180 | "import/first": "error", 181 | "import/no-amd": "error", 182 | "import/no-webpack-loader-syntax": "error", 183 | "react/forbid-foreign-prop-types": ["warn", { "allowInPropTypes": true }], 184 | "react/jsx-no-comment-textnodes": "warn", 185 | "react/jsx-no-duplicate-props": "warn", 186 | "react/jsx-no-target-blank": "warn", 187 | "react/jsx-no-undef": "error", 188 | "react/jsx-pascal-case": ["warn", { "allowAllCaps": true, "ignore": [] }], 189 | "react/jsx-uses-react": "warn", 190 | "react/jsx-uses-vars": "warn", 191 | "react/no-danger-with-children": "warn", 192 | "react/no-direct-mutation-state": "warn", 193 | "react/no-is-mounted": "warn", 194 | "react/no-typos": "error", 195 | "react/react-in-jsx-scope": "error", 196 | "react/require-render-return": "error", 197 | "react/style-prop-object": "warn", 198 | "jsx-a11y/accessible-emoji": "warn", 199 | "jsx-a11y/alt-text": "warn", 200 | "jsx-a11y/anchor-has-content": "warn", 201 | "jsx-a11y/anchor-is-valid": [ 202 | "warn", 203 | { "aspects": ["noHref", "invalidHref"] } 204 | ], 205 | "jsx-a11y/aria-activedescendant-has-tabindex": "warn", 206 | "jsx-a11y/aria-props": "warn", 207 | "jsx-a11y/aria-proptypes": "warn", 208 | "jsx-a11y/aria-role": "warn", 209 | "jsx-a11y/aria-unsupported-elements": "warn", 210 | "jsx-a11y/heading-has-content": "warn", 211 | "jsx-a11y/iframe-has-title": "warn", 212 | "jsx-a11y/img-redundant-alt": "warn", 213 | "jsx-a11y/no-access-key": "warn", 214 | "jsx-a11y/no-distracting-elements": "warn", 215 | "jsx-a11y/no-redundant-roles": "warn", 216 | "jsx-a11y/role-has-required-aria-props": "warn", 217 | "jsx-a11y/role-supports-aria-props": "warn", 218 | "jsx-a11y/scope": "warn", 219 | "react-hooks/rules-of-hooks": "error", 220 | "default-case": "off", 221 | "no-dupe-class-members": "off", 222 | "no-undef": "off", 223 | "@typescript-eslint/consistent-type-assertions": "warn", 224 | "no-array-constructor": "off", 225 | "@typescript-eslint/no-array-constructor": "warn", 226 | "@typescript-eslint/no-namespace": "error", 227 | "no-use-before-define": "off", 228 | "@typescript-eslint/no-use-before-define": [ 229 | "warn", 230 | { 231 | "functions": false, 232 | "classes": false, 233 | "variables": false, 234 | "typedefs": false 235 | } 236 | ], 237 | "no-unused-vars": "off", 238 | "@typescript-eslint/no-unused-vars": [ 239 | "warn", 240 | { "args": "none", "ignoreRestSiblings": true } 241 | ], 242 | "no-useless-constructor": "off", 243 | "@typescript-eslint/no-useless-constructor": "warn" 244 | }, 245 | "extends": ["../../.eslintrc"], 246 | "ignorePatterns": ["!**/*"] 247 | } 248 | -------------------------------------------------------------------------------- /libs/providers/projects/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "commonjs": true, 5 | "es6": true, 6 | "jest": true, 7 | "node": true 8 | }, 9 | "settings": { "react": { "version": "detect" } }, 10 | "plugins": ["import", "jsx-a11y", "react", "react-hooks"], 11 | "rules": { 12 | "array-callback-return": "warn", 13 | "dot-location": ["warn", "property"], 14 | "eqeqeq": ["warn", "smart"], 15 | "new-parens": "warn", 16 | "no-caller": "warn", 17 | "no-cond-assign": ["warn", "except-parens"], 18 | "no-const-assign": "warn", 19 | "no-control-regex": "warn", 20 | "no-delete-var": "warn", 21 | "no-dupe-args": "warn", 22 | "no-dupe-keys": "warn", 23 | "no-duplicate-case": "warn", 24 | "no-empty-character-class": "warn", 25 | "no-empty-pattern": "warn", 26 | "no-eval": "warn", 27 | "no-ex-assign": "warn", 28 | "no-extend-native": "warn", 29 | "no-extra-bind": "warn", 30 | "no-extra-label": "warn", 31 | "no-fallthrough": "warn", 32 | "no-func-assign": "warn", 33 | "no-implied-eval": "warn", 34 | "no-invalid-regexp": "warn", 35 | "no-iterator": "warn", 36 | "no-label-var": "warn", 37 | "no-labels": ["warn", { "allowLoop": true, "allowSwitch": false }], 38 | "no-lone-blocks": "warn", 39 | "no-loop-func": "warn", 40 | "no-mixed-operators": [ 41 | "warn", 42 | { 43 | "groups": [ 44 | ["&", "|", "^", "~", "<<", ">>", ">>>"], 45 | ["==", "!=", "===", "!==", ">", ">=", "<", "<="], 46 | ["&&", "||"], 47 | ["in", "instanceof"] 48 | ], 49 | "allowSamePrecedence": false 50 | } 51 | ], 52 | "no-multi-str": "warn", 53 | "no-native-reassign": "warn", 54 | "no-negated-in-lhs": "warn", 55 | "no-new-func": "warn", 56 | "no-new-object": "warn", 57 | "no-new-symbol": "warn", 58 | "no-new-wrappers": "warn", 59 | "no-obj-calls": "warn", 60 | "no-octal": "warn", 61 | "no-octal-escape": "warn", 62 | "no-redeclare": "warn", 63 | "no-regex-spaces": "warn", 64 | "no-restricted-syntax": ["warn", "WithStatement"], 65 | "no-script-url": "warn", 66 | "no-self-assign": "warn", 67 | "no-self-compare": "warn", 68 | "no-sequences": "warn", 69 | "no-shadow-restricted-names": "warn", 70 | "no-sparse-arrays": "warn", 71 | "no-template-curly-in-string": "warn", 72 | "no-this-before-super": "warn", 73 | "no-throw-literal": "warn", 74 | "no-restricted-globals": [ 75 | "error", 76 | "addEventListener", 77 | "blur", 78 | "close", 79 | "closed", 80 | "confirm", 81 | "defaultStatus", 82 | "defaultstatus", 83 | "event", 84 | "external", 85 | "find", 86 | "focus", 87 | "frameElement", 88 | "frames", 89 | "history", 90 | "innerHeight", 91 | "innerWidth", 92 | "length", 93 | "location", 94 | "locationbar", 95 | "menubar", 96 | "moveBy", 97 | "moveTo", 98 | "name", 99 | "onblur", 100 | "onerror", 101 | "onfocus", 102 | "onload", 103 | "onresize", 104 | "onunload", 105 | "open", 106 | "opener", 107 | "opera", 108 | "outerHeight", 109 | "outerWidth", 110 | "pageXOffset", 111 | "pageYOffset", 112 | "parent", 113 | "print", 114 | "removeEventListener", 115 | "resizeBy", 116 | "resizeTo", 117 | "screen", 118 | "screenLeft", 119 | "screenTop", 120 | "screenX", 121 | "screenY", 122 | "scroll", 123 | "scrollbars", 124 | "scrollBy", 125 | "scrollTo", 126 | "scrollX", 127 | "scrollY", 128 | "self", 129 | "status", 130 | "statusbar", 131 | "stop", 132 | "toolbar", 133 | "top" 134 | ], 135 | "no-unexpected-multiline": "warn", 136 | "no-unreachable": "warn", 137 | "no-unused-expressions": [ 138 | "error", 139 | { 140 | "allowShortCircuit": true, 141 | "allowTernary": true, 142 | "allowTaggedTemplates": true 143 | } 144 | ], 145 | "no-unused-labels": "warn", 146 | "no-useless-computed-key": "warn", 147 | "no-useless-concat": "warn", 148 | "no-useless-escape": "warn", 149 | "no-useless-rename": [ 150 | "warn", 151 | { 152 | "ignoreDestructuring": false, 153 | "ignoreImport": false, 154 | "ignoreExport": false 155 | } 156 | ], 157 | "no-with": "warn", 158 | "no-whitespace-before-property": "warn", 159 | "react-hooks/exhaustive-deps": "warn", 160 | "require-yield": "warn", 161 | "rest-spread-spacing": ["warn", "never"], 162 | "strict": ["warn", "never"], 163 | "unicode-bom": ["warn", "never"], 164 | "use-isnan": "warn", 165 | "valid-typeof": "warn", 166 | "no-restricted-properties": [ 167 | "error", 168 | { 169 | "object": "require", 170 | "property": "ensure", 171 | "message": "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting" 172 | }, 173 | { 174 | "object": "System", 175 | "property": "import", 176 | "message": "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting" 177 | } 178 | ], 179 | "getter-return": "warn", 180 | "import/first": "error", 181 | "import/no-amd": "error", 182 | "import/no-webpack-loader-syntax": "error", 183 | "react/forbid-foreign-prop-types": ["warn", { "allowInPropTypes": true }], 184 | "react/jsx-no-comment-textnodes": "warn", 185 | "react/jsx-no-duplicate-props": "warn", 186 | "react/jsx-no-target-blank": "warn", 187 | "react/jsx-no-undef": "error", 188 | "react/jsx-pascal-case": ["warn", { "allowAllCaps": true, "ignore": [] }], 189 | "react/jsx-uses-react": "warn", 190 | "react/jsx-uses-vars": "warn", 191 | "react/no-danger-with-children": "warn", 192 | "react/no-direct-mutation-state": "warn", 193 | "react/no-is-mounted": "warn", 194 | "react/no-typos": "error", 195 | "react/react-in-jsx-scope": "error", 196 | "react/require-render-return": "error", 197 | "react/style-prop-object": "warn", 198 | "jsx-a11y/accessible-emoji": "warn", 199 | "jsx-a11y/alt-text": "warn", 200 | "jsx-a11y/anchor-has-content": "warn", 201 | "jsx-a11y/anchor-is-valid": [ 202 | "warn", 203 | { "aspects": ["noHref", "invalidHref"] } 204 | ], 205 | "jsx-a11y/aria-activedescendant-has-tabindex": "warn", 206 | "jsx-a11y/aria-props": "warn", 207 | "jsx-a11y/aria-proptypes": "warn", 208 | "jsx-a11y/aria-role": "warn", 209 | "jsx-a11y/aria-unsupported-elements": "warn", 210 | "jsx-a11y/heading-has-content": "warn", 211 | "jsx-a11y/iframe-has-title": "warn", 212 | "jsx-a11y/img-redundant-alt": "warn", 213 | "jsx-a11y/no-access-key": "warn", 214 | "jsx-a11y/no-distracting-elements": "warn", 215 | "jsx-a11y/no-redundant-roles": "warn", 216 | "jsx-a11y/role-has-required-aria-props": "warn", 217 | "jsx-a11y/role-supports-aria-props": "warn", 218 | "jsx-a11y/scope": "warn", 219 | "react-hooks/rules-of-hooks": "error", 220 | "default-case": "off", 221 | "no-dupe-class-members": "off", 222 | "no-undef": "off", 223 | "@typescript-eslint/consistent-type-assertions": "warn", 224 | "no-array-constructor": "off", 225 | "@typescript-eslint/no-array-constructor": "warn", 226 | "@typescript-eslint/no-namespace": "error", 227 | "no-use-before-define": "off", 228 | "@typescript-eslint/no-use-before-define": [ 229 | "warn", 230 | { 231 | "functions": false, 232 | "classes": false, 233 | "variables": false, 234 | "typedefs": false 235 | } 236 | ], 237 | "no-unused-vars": "off", 238 | "@typescript-eslint/no-unused-vars": [ 239 | "warn", 240 | { "args": "none", "ignoreRestSiblings": true } 241 | ], 242 | "no-useless-constructor": "off", 243 | "@typescript-eslint/no-useless-constructor": "warn" 244 | }, 245 | "extends": ["../../../.eslintrc"], 246 | "ignorePatterns": ["!**/*"] 247 | } 248 | -------------------------------------------------------------------------------- /apps/outreach-initiative/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "commonjs": true, 5 | "es6": true, 6 | "jest": true, 7 | "node": true 8 | }, 9 | "settings": { "react": { "version": "detect" } }, 10 | "plugins": ["import", "jsx-a11y", "react", "react-hooks"], 11 | "rules": { 12 | "array-callback-return": "warn", 13 | "dot-location": ["warn", "property"], 14 | "eqeqeq": ["warn", "smart"], 15 | "new-parens": "warn", 16 | "no-caller": "warn", 17 | "no-cond-assign": ["warn", "except-parens"], 18 | "no-const-assign": "warn", 19 | "no-control-regex": "warn", 20 | "no-delete-var": "warn", 21 | "no-dupe-args": "warn", 22 | "no-dupe-keys": "warn", 23 | "no-duplicate-case": "warn", 24 | "no-empty-character-class": "warn", 25 | "no-empty-pattern": "warn", 26 | "no-eval": "warn", 27 | "no-ex-assign": "warn", 28 | "no-extend-native": "warn", 29 | "no-extra-bind": "warn", 30 | "no-extra-label": "warn", 31 | "no-fallthrough": "warn", 32 | "no-func-assign": "warn", 33 | "no-implied-eval": "warn", 34 | "no-invalid-regexp": "warn", 35 | "no-iterator": "warn", 36 | "no-label-var": "warn", 37 | "no-labels": ["warn", { "allowLoop": true, "allowSwitch": false }], 38 | "no-lone-blocks": "warn", 39 | "no-loop-func": "warn", 40 | "no-mixed-operators": [ 41 | "warn", 42 | { 43 | "groups": [ 44 | ["&", "|", "^", "~", "<<", ">>", ">>>"], 45 | ["==", "!=", "===", "!==", ">", ">=", "<", "<="], 46 | ["&&", "||"], 47 | ["in", "instanceof"] 48 | ], 49 | "allowSamePrecedence": false 50 | } 51 | ], 52 | "no-multi-str": "warn", 53 | "no-native-reassign": "warn", 54 | "no-negated-in-lhs": "warn", 55 | "no-new-func": "warn", 56 | "no-new-object": "warn", 57 | "no-new-symbol": "warn", 58 | "no-new-wrappers": "warn", 59 | "no-obj-calls": "warn", 60 | "no-octal": "warn", 61 | "no-octal-escape": "warn", 62 | "no-redeclare": "warn", 63 | "no-regex-spaces": "warn", 64 | "no-restricted-syntax": ["warn", "WithStatement"], 65 | "no-script-url": "warn", 66 | "no-self-assign": "warn", 67 | "no-self-compare": "warn", 68 | "no-sequences": "warn", 69 | "no-shadow-restricted-names": "warn", 70 | "no-sparse-arrays": "warn", 71 | "no-template-curly-in-string": "warn", 72 | "no-this-before-super": "warn", 73 | "no-throw-literal": "warn", 74 | "no-restricted-globals": [ 75 | "error", 76 | "addEventListener", 77 | "blur", 78 | "close", 79 | "closed", 80 | "confirm", 81 | "defaultStatus", 82 | "defaultstatus", 83 | "event", 84 | "external", 85 | "find", 86 | "focus", 87 | "frameElement", 88 | "frames", 89 | "history", 90 | "innerHeight", 91 | "innerWidth", 92 | "length", 93 | "location", 94 | "locationbar", 95 | "menubar", 96 | "moveBy", 97 | "moveTo", 98 | "name", 99 | "onblur", 100 | "onerror", 101 | "onfocus", 102 | "onload", 103 | "onresize", 104 | "onunload", 105 | "open", 106 | "opener", 107 | "opera", 108 | "outerHeight", 109 | "outerWidth", 110 | "pageXOffset", 111 | "pageYOffset", 112 | "parent", 113 | "print", 114 | "removeEventListener", 115 | "resizeBy", 116 | "resizeTo", 117 | "screen", 118 | "screenLeft", 119 | "screenTop", 120 | "screenX", 121 | "screenY", 122 | "scroll", 123 | "scrollbars", 124 | "scrollBy", 125 | "scrollTo", 126 | "scrollX", 127 | "scrollY", 128 | "self", 129 | "status", 130 | "statusbar", 131 | "stop", 132 | "toolbar", 133 | "top" 134 | ], 135 | "no-unexpected-multiline": "warn", 136 | "no-unreachable": "warn", 137 | "no-unused-expressions": [ 138 | "error", 139 | { 140 | "allowShortCircuit": true, 141 | "allowTernary": true, 142 | "allowTaggedTemplates": true 143 | } 144 | ], 145 | "no-unused-labels": "warn", 146 | "no-useless-computed-key": "warn", 147 | "no-useless-concat": "warn", 148 | "no-useless-escape": "warn", 149 | "no-useless-rename": [ 150 | "warn", 151 | { 152 | "ignoreDestructuring": false, 153 | "ignoreImport": false, 154 | "ignoreExport": false 155 | } 156 | ], 157 | "no-with": "warn", 158 | "no-whitespace-before-property": "warn", 159 | "react-hooks/exhaustive-deps": "warn", 160 | "require-yield": "warn", 161 | "rest-spread-spacing": ["warn", "never"], 162 | "strict": ["warn", "never"], 163 | "unicode-bom": ["warn", "never"], 164 | "use-isnan": "warn", 165 | "valid-typeof": "warn", 166 | "no-restricted-properties": [ 167 | "error", 168 | { 169 | "object": "require", 170 | "property": "ensure", 171 | "message": "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting" 172 | }, 173 | { 174 | "object": "System", 175 | "property": "import", 176 | "message": "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting" 177 | } 178 | ], 179 | "getter-return": "warn", 180 | "import/first": "error", 181 | "import/no-amd": "error", 182 | "import/no-webpack-loader-syntax": "error", 183 | "react/forbid-foreign-prop-types": ["warn", { "allowInPropTypes": true }], 184 | "react/jsx-no-comment-textnodes": "warn", 185 | "react/jsx-no-duplicate-props": "warn", 186 | "react/jsx-no-target-blank": "warn", 187 | "react/jsx-no-undef": "error", 188 | "react/jsx-pascal-case": ["warn", { "allowAllCaps": true, "ignore": [] }], 189 | "react/jsx-uses-react": "warn", 190 | "react/jsx-uses-vars": "warn", 191 | "react/no-danger-with-children": "warn", 192 | "react/no-direct-mutation-state": "warn", 193 | "react/no-is-mounted": "warn", 194 | "react/no-typos": "error", 195 | "react/react-in-jsx-scope": "error", 196 | "react/require-render-return": "error", 197 | "react/style-prop-object": "warn", 198 | "jsx-a11y/accessible-emoji": "warn", 199 | "jsx-a11y/alt-text": "warn", 200 | "jsx-a11y/anchor-has-content": "warn", 201 | "jsx-a11y/anchor-is-valid": [ 202 | "warn", 203 | { "aspects": ["noHref", "invalidHref"] } 204 | ], 205 | "jsx-a11y/aria-activedescendant-has-tabindex": "warn", 206 | "jsx-a11y/aria-props": "warn", 207 | "jsx-a11y/aria-proptypes": "warn", 208 | "jsx-a11y/aria-role": "warn", 209 | "jsx-a11y/aria-unsupported-elements": "warn", 210 | "jsx-a11y/heading-has-content": "warn", 211 | "jsx-a11y/iframe-has-title": "warn", 212 | "jsx-a11y/img-redundant-alt": "warn", 213 | "jsx-a11y/no-access-key": "warn", 214 | "jsx-a11y/no-distracting-elements": "warn", 215 | "jsx-a11y/no-redundant-roles": "warn", 216 | "jsx-a11y/role-has-required-aria-props": "warn", 217 | "jsx-a11y/role-supports-aria-props": "warn", 218 | "jsx-a11y/scope": "warn", 219 | "react-hooks/rules-of-hooks": "error", 220 | "default-case": "off", 221 | "no-dupe-class-members": "off", 222 | "no-undef": "off", 223 | "@typescript-eslint/consistent-type-assertions": "warn", 224 | "no-array-constructor": "off", 225 | "@typescript-eslint/no-array-constructor": "warn", 226 | "@typescript-eslint/no-namespace": "error", 227 | "no-use-before-define": "off", 228 | "@typescript-eslint/no-use-before-define": [ 229 | "warn", 230 | { 231 | "functions": false, 232 | "classes": false, 233 | "variables": false, 234 | "typedefs": false 235 | } 236 | ], 237 | "no-unused-vars": "off", 238 | "@typescript-eslint/no-unused-vars": [ 239 | "warn", 240 | { "args": "none", "ignoreRestSiblings": true } 241 | ], 242 | "no-useless-constructor": "off", 243 | "@typescript-eslint/no-useless-constructor": "warn", 244 | "@typescript-eslint/explicit-module-boundary-types": "off" 245 | }, 246 | "extends": ["../../.eslintrc"], 247 | "ignorePatterns": ["!**/*"] 248 | } 249 | --------------------------------------------------------------------------------