1
Fork 0

Start on typescript transition

This commit is contained in:
viktorstrate 2021-04-12 00:14:27 +02:00
parent 084d9bfef7
commit 264ee54e7f
No known key found for this signature in database
GPG Key ID: 3F855605109C1E8A
71 changed files with 2669 additions and 327 deletions

View File

@ -1842,8 +1842,8 @@ type User {
} }
enum LanguageTranslation { enum LanguageTranslation {
en, English,
da Danish
} }
type UserPreferences { type UserPreferences {
@ -1899,8 +1899,8 @@ type MediaDownload {
} }
enum MediaType { enum MediaType {
photo Photo
video Video
} }
type Media { type Media {

View File

@ -71,18 +71,18 @@ type TimelineGroup struct {
type LanguageTranslation string type LanguageTranslation string
const ( const (
LanguageTranslationEn LanguageTranslation = "en" LanguageTranslationEnglish LanguageTranslation = "English"
LanguageTranslationDa LanguageTranslation = "da" LanguageTranslationDanish LanguageTranslation = "Danish"
) )
var AllLanguageTranslation = []LanguageTranslation{ var AllLanguageTranslation = []LanguageTranslation{
LanguageTranslationEn, LanguageTranslationEnglish,
LanguageTranslationDa, LanguageTranslationDanish,
} }
func (e LanguageTranslation) IsValid() bool { func (e LanguageTranslation) IsValid() bool {
switch e { switch e {
case LanguageTranslationEn, LanguageTranslationDa: case LanguageTranslationEnglish, LanguageTranslationDanish:
return true return true
} }
return false return false
@ -112,8 +112,8 @@ func (e LanguageTranslation) MarshalGQL(w io.Writer) {
type MediaType string type MediaType string
const ( const (
MediaTypePhoto MediaType = "photo" MediaTypePhoto MediaType = "Photo"
MediaTypeVideo MediaType = "video" MediaTypeVideo MediaType = "Video"
) )
var AllMediaType = []MediaType{ var AllMediaType = []MediaType{

View File

@ -222,8 +222,8 @@ type User {
} }
enum LanguageTranslation { enum LanguageTranslation {
en, English,
da Danish
} }
type UserPreferences { type UserPreferences {
@ -279,8 +279,8 @@ type MediaDownload {
} }
enum MediaType { enum MediaType {
photo Photo
video Video
} }
type Media { type Media {

View File

@ -3,6 +3,7 @@ module.exports = {
browser: true, browser: true,
es6: true, es6: true,
}, },
ignorePatterns: ['**/*.ts', '**/*.tsx'],
extends: ['eslint:recommended', 'plugin:react/recommended'], extends: ['eslint:recommended', 'plugin:react/recommended'],
globals: { globals: {
Atomics: 'readonly', Atomics: 'readonly',

33
ui/__generated__/globalTypes.ts generated Normal file
View File

@ -0,0 +1,33 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
//==============================================================
// START Enums and Input Objects
//==============================================================
export enum LanguageTranslation {
Danish = "Danish",
English = "English",
}
export enum MediaType {
Photo = "Photo",
Video = "Video",
}
export enum NotificationType {
Close = "Close",
Message = "Message",
Progress = "Progress",
}
export enum OrderDirection {
ASC = "ASC",
DESC = "DESC",
}
//==============================================================
// END Enums and Input Objects
//==============================================================

8
ui/apollo.config.js Normal file
View File

@ -0,0 +1,8 @@
module.exports = {
client: {
service: {
name: 'photoview',
localSchemaFile: '../api/graphql/schema.graphql',
},
},
}

View File

@ -20,7 +20,7 @@ const defineEnv = ENVIRONMENT_VARIABLES.reduce((acc, key) => {
}, {}) }, {})
const esbuildOptions = { const esbuildOptions = {
entryPoints: ['src/index.js'], entryPoints: ['src/index.tsx'],
plugins: [ plugins: [
babel({ babel({
filter: /photoview\/ui\/src\/.*\.js$/, filter: /photoview\/ui\/src\/.*\.js$/,

View File

@ -1,12 +1,12 @@
{ {
"album_filter": { "album_filter": {
"only_favorites": "Vis kun favoritter", "only_favorites": null,
"sort_by": "Sorter efter", "sort_by": null,
"sorting_options": { "sorting_options": {
"date_imported": "Dato for importering", "date_imported": null,
"date_shot": "Dato", "date_shot": null,
"title": "Titel", "title": null,
"type": "Type" "type": null
} }
}, },
"albums_page": { "albums_page": {
@ -14,33 +14,33 @@
}, },
"general": { "general": {
"action": { "action": {
"add": "Tilføj", "add": null,
"cancel": "Annuller", "cancel": null,
"delete": "Slet", "delete": null,
"remove": "Fjern", "remove": null,
"save": "Gem" "save": null
}, },
"loading": { "loading": {
"album": "Loader album", "album": null,
"default": "Loader...", "default": "Loader...",
"media": "Loader medier", "media": null,
"page": "Loader side", "page": "Loader side",
"paginate": { "paginate": {
"faces": "Loader flere personer", "faces": "Loader flere personer",
"media": "Loader flere medier" "media": "Loader flere medier"
}, },
"shares": "Loader delinger...", "shares": null,
"timeline": "Loader tidslinje" "timeline": "Loader tidslinje"
} }
}, },
"header": { "header": {
"search": { "search": {
"loading": "Loader resultater...", "loading": null,
"no_results": "Fandt ingen resultater", "no_results": null,
"placeholder": "Søg", "placeholder": null,
"result_type": { "result_type": {
"albums": "Albums", "albums": null,
"photos": "Billeder" "photos": null
} }
} }
}, },
@ -74,24 +74,24 @@
}, },
"settings": { "settings": {
"concurrent_workers": { "concurrent_workers": {
"description": "Det maksimale antal medier som må skannes samtidig", "description": null,
"title": "Samtidige scanner-arbejdere" "title": null
}, },
"logout": null, "logout": null,
"periodic_scanner": { "periodic_scanner": {
"checkbox_label": "Aktiver periodiske scanner", "checkbox_label": null,
"field": { "field": {
"description": "Hvor ofte scanneren bør udføre automatiske scanninger af alle brugere", "description": null,
"label": "Periodiske scanningsintervaller" "label": null
}, },
"interval_unit": { "interval_unit": {
"days": "Dage", "days": null,
"hour": "Timer", "hour": null,
"minutes": "Minutter", "minutes": null,
"months": "Måneder", "months": null,
"seconds": "Sekunder" "seconds": null
}, },
"title": "Periodisk scanner" "title": null
}, },
"scanner": { "scanner": {
"description": "Vil scanne alle brugere for nye eller opdaterede medier", "description": "Vil scanne alle brugere for nye eller opdaterede medier",
@ -106,21 +106,21 @@
}, },
"users": { "users": {
"add_user": { "add_user": {
"submit": "Tilføj bruger" "submit": null
}, },
"confirm_delete_user": { "confirm_delete_user": {
"action": "Slet {user}", "action": null,
"description": "<0>Er du sikker på at du vil slette <1></1>?</0><p>Denne handling kan ikke fortrydes</p>", "description": null,
"title": "Slet bruger" "title": null
}, },
"password_reset": { "password_reset": {
"description": "Ændre adgangskode for <1></1>", "description": null,
"form": { "form": {
"label": "Ny adgangskode", "label": null,
"placeholder": "adgangskode", "placeholder": null,
"submit": "Ændre adgangskode" "submit": null
}, },
"title": "Ændre adgangskode" "title": null
}, },
"table": { "table": {
"column_names": { "column_names": {
@ -132,10 +132,10 @@
"new_user": "Ny bruger", "new_user": "Ny bruger",
"row": { "row": {
"action": { "action": {
"change_password": "Ændre adgangskode", "change_password": null,
"delete": "Slet", "delete": null,
"edit": "Rediger", "edit": null,
"scan": "Scan" "scan": null
} }
} }
}, },
@ -153,72 +153,72 @@
}, },
"sidebar": { "sidebar": {
"album": { "album": {
"title": "Album indstillinger" "title": null
}, },
"download": { "download": {
"filesize": { "filesize": {
"byte": "{{count}} Byte", "byte": null,
"byte_plural": "{{count}} Bytes", "byte_plural": null,
"giga_byte": "{{count}} GB", "giga_byte": null,
"kilo_byte": "{{count}} KB", "kilo_byte": null,
"mega_byte": "{{count}} MB", "mega_byte": null,
"tera_byte": "{{count}} TB" "tera_byte": null
}, },
"table_columns": { "table_columns": {
"dimensions": "Dimension", "dimensions": null,
"file_size": "Størrelse", "file_size": null,
"file_type": "Type", "file_type": null,
"name": "Navn" "name": null
}, },
"title": "Download" "title": null
}, },
"media": { "media": {
"exif": { "exif": {
"exposure_program": { "exposure_program": {
"action_program": "Actionprogram", "action_program": null,
"aperture_priority": "Blændeprioritet", "aperture_priority": null,
"bulb": "Bulb", "bulb": null,
"creative_program": "Kreativ program", "creative_program": null,
"landscape_mode": "Landskabsmode", "landscape_mode": null,
"manual": "Manuel", "manual": null,
"normal_program": "Normal program", "normal_program": null,
"not_defined": "Ikke defineret", "not_defined": null,
"portrait_mode": "Portræt mode", "portrait_mode": null,
"shutter_priority": "Lukkerprioritet" "shutter_priority": null
}, },
"flash": { "flash": {
"auto": "Auto", "auto": null,
"did_not_fire": "Blitz affyrede ikke", "did_not_fire": null,
"fired": "Affyrede", "fired": null,
"no_flash": "Ingen blitz", "no_flash": null,
"no_flash_function": "Ingen blitz-funktion", "no_flash_function": null,
"off": "Slukket", "off": null,
"on": "Tændt", "on": null,
"red_eye_reduction": "Røde øjne reduktion", "red_eye_reduction": null,
"return_detected": "Retur registreret", "return_detected": null,
"return_not_detected": "Retur ikke registreret" "return_not_detected": null
}, },
"name": { "name": {
"aperture": "Blænde", "aperture": null,
"camera": "Kamera", "camera": null,
"date_shot": "Dato", "date_shot": null,
"exposure": "Lukketid", "exposure": null,
"exposure_program": "Lukketid program", "exposure_program": null,
"flash": "Blitz", "flash": null,
"focal_length": "Fokallængde", "focal_length": null,
"iso": "ISO", "iso": null,
"lens": "Lense", "lens": null,
"maker": "Mærke" "maker": null
} }
} }
}, },
"sharing": { "sharing": {
"add_share": "Tilføj deling", "add_share": null,
"copy_link": "Kopier link", "copy_link": null,
"no_shares_found": "Ingen delinger fundet", "no_shares_found": null,
"public_link": "Offentligt link", "public_link": null,
"table_header": "Offentlige delinger", "table_header": null,
"title": "Indstillinger for deling" "title": null
} }
}, },
"sidemenu": { "sidemenu": {

View File

@ -158,7 +158,7 @@
"download": { "download": {
"filesize": { "filesize": {
"byte": "{{count}} Byte", "byte": "{{count}} Byte",
"byte_plural": "{{count}} Bytes", "byte_plural": null,
"giga_byte": "{{count}} GB", "giga_byte": "{{count}} GB",
"kilo_byte": "{{count}} KB", "kilo_byte": "{{count}} KB",
"mega_byte": "{{count}} MB", "mega_byte": "{{count}} MB",

489
ui/package-lock.json generated
View File

@ -9,11 +9,11 @@
"version": "0.0.1", "version": "0.0.1",
"license": "GPL-3.0", "license": "GPL-3.0",
"dependencies": { "dependencies": {
"@apollo/client": "^3.3.13", "@apollo/client": "^3.3.14",
"@babel/core": "^7.13.14", "@babel/core": "^7.13.15",
"@babel/plugin-transform-modules-commonjs": "^7.13.8", "@babel/plugin-transform-modules-commonjs": "^7.13.8",
"@babel/plugin-transform-runtime": "^7.13.10", "@babel/plugin-transform-runtime": "^7.13.15",
"@babel/preset-env": "^7.13.12", "@babel/preset-env": "^7.13.15",
"@babel/preset-react": "^7.13.13", "@babel/preset-react": "^7.13.13",
"babel-eslint": "^10.1.0", "babel-eslint": "^10.1.0",
"babel-jest": "^26.6.3", "babel-jest": "^26.6.3",
@ -27,14 +27,13 @@
"dotenv": "^8.2.0", "dotenv": "^8.2.0",
"esbuild": "^0.8.52", "esbuild": "^0.8.52",
"esbuild-plugin-babel": "^0.2.3", "esbuild-plugin-babel": "^0.2.3",
"eslint": "^7.23.0", "eslint": "^7.24.0",
"eslint-plugin-jest": "^24.3.3", "eslint-plugin-jest": "^24.3.5",
"eslint-plugin-jest-dom": "^3.7.0", "eslint-plugin-jest-dom": "^3.8.0",
"eslint-plugin-react": "^7.23.1", "eslint-plugin-react": "^7.23.2",
"eslint-plugin-react-hooks": "^4.2.0", "eslint-plugin-react-hooks": "^4.2.0",
"fs-extra": "^9.1.0", "fs-extra": "^9.1.0",
"graphql": "^15.5.0", "i18next": "^20.2.1",
"i18next": "^20.1.0",
"mapbox-gl": "^2.2.0", "mapbox-gl": "^2.2.0",
"prop-types": "^15.7.2", "prop-types": "^15.7.2",
"react": "^17.0.2", "react": "^17.0.2",
@ -49,6 +48,7 @@
"semantic-ui-react": "^2.0.3", "semantic-ui-react": "^2.0.3",
"styled-components": "^5.2.3", "styled-components": "^5.2.3",
"subscriptions-transport-ws": "^0.9.18", "subscriptions-transport-ws": "^0.9.18",
"typescript": "^4.2.4",
"url-join": "^4.0.1", "url-join": "^4.0.1",
"workbox-build": "^6.1.2" "workbox-build": "^6.1.2"
}, },
@ -56,6 +56,10 @@
"@testing-library/jest-dom": "^5.11.10", "@testing-library/jest-dom": "^5.11.10",
"@testing-library/react": "^11.2.6", "@testing-library/react": "^11.2.6",
"@types/react": "^17.0.3", "@types/react": "^17.0.3",
"@types/react-dom": "^17.0.3",
"@types/react-helmet": "^6.1.1",
"@types/react-router-dom": "^5.1.7",
"@types/styled-components": "^5.1.9",
"husky": "^6.0.0", "husky": "^6.0.0",
"jest": "^26.6.3", "jest": "^26.6.3",
"lint-staged": "^10.5.4", "lint-staged": "^10.5.4",
@ -63,9 +67,9 @@
} }
}, },
"node_modules/@apollo/client": { "node_modules/@apollo/client": {
"version": "3.3.13", "version": "3.3.14",
"resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.3.13.tgz", "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.3.14.tgz",
"integrity": "sha512-usiVmXiOq0J/GpyIOIhlF8ItHpiPJObC7zoxLYPoOYj3G3OB0hCIcUKs3aTJ3ATW7u8QxvYgRaJg72NN7E1WOg==", "integrity": "sha512-z7YwMvF9grmpWUG+26e3gPcBAOA/r/Ci5gwK7JVm3bGYG9kKqG8MF6sMXEbuwTsFseE4duSp0icJ6tdzxJhhlA==",
"dependencies": { "dependencies": {
"@graphql-typed-document-node/core": "^3.0.0", "@graphql-typed-document-node/core": "^3.0.0",
"@types/zen-observable": "^0.8.0", "@types/zen-observable": "^0.8.0",
@ -112,23 +116,23 @@
} }
}, },
"node_modules/@babel/compat-data": { "node_modules/@babel/compat-data": {
"version": "7.13.12", "version": "7.13.15",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.15.tgz",
"integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==" "integrity": "sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA=="
}, },
"node_modules/@babel/core": { "node_modules/@babel/core": {
"version": "7.13.14", "version": "7.13.15",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.14.tgz", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz",
"integrity": "sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA==", "integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==",
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.12.13", "@babel/code-frame": "^7.12.13",
"@babel/generator": "^7.13.9", "@babel/generator": "^7.13.9",
"@babel/helper-compilation-targets": "^7.13.13", "@babel/helper-compilation-targets": "^7.13.13",
"@babel/helper-module-transforms": "^7.13.14", "@babel/helper-module-transforms": "^7.13.14",
"@babel/helpers": "^7.13.10", "@babel/helpers": "^7.13.10",
"@babel/parser": "^7.13.13", "@babel/parser": "^7.13.15",
"@babel/template": "^7.12.13", "@babel/template": "^7.12.13",
"@babel/traverse": "^7.13.13", "@babel/traverse": "^7.13.15",
"@babel/types": "^7.13.14", "@babel/types": "^7.13.14",
"convert-source-map": "^1.7.0", "convert-source-map": "^1.7.0",
"debug": "^4.1.0", "debug": "^4.1.0",
@ -252,9 +256,9 @@
} }
}, },
"node_modules/@babel/helper-define-polyfill-provider": { "node_modules/@babel/helper-define-polyfill-provider": {
"version": "0.1.5", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz",
"integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==",
"dependencies": { "dependencies": {
"@babel/helper-compilation-targets": "^7.13.0", "@babel/helper-compilation-targets": "^7.13.0",
"@babel/helper-module-imports": "^7.12.13", "@babel/helper-module-imports": "^7.12.13",
@ -443,9 +447,9 @@
} }
}, },
"node_modules/@babel/parser": { "node_modules/@babel/parser": {
"version": "7.13.13", "version": "7.13.15",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz",
"integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==",
"bin": { "bin": {
"parser": "bin/babel-parser.js" "parser": "bin/babel-parser.js"
}, },
@ -467,9 +471,9 @@
} }
}, },
"node_modules/@babel/plugin-proposal-async-generator-functions": { "node_modules/@babel/plugin-proposal-async-generator-functions": {
"version": "7.13.8", "version": "7.13.15",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz",
"integrity": "sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==", "integrity": "sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==",
"dependencies": { "dependencies": {
"@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-remap-async-to-generator": "^7.13.0", "@babel/helper-remap-async-to-generator": "^7.13.0",
@ -1087,9 +1091,9 @@
} }
}, },
"node_modules/@babel/plugin-transform-regenerator": { "node_modules/@babel/plugin-transform-regenerator": {
"version": "7.12.13", "version": "7.13.15",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz",
"integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==", "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==",
"dependencies": { "dependencies": {
"regenerator-transform": "^0.14.2" "regenerator-transform": "^0.14.2"
}, },
@ -1109,15 +1113,15 @@
} }
}, },
"node_modules/@babel/plugin-transform-runtime": { "node_modules/@babel/plugin-transform-runtime": {
"version": "7.13.10", "version": "7.13.15",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.10.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.15.tgz",
"integrity": "sha512-Y5k8ipgfvz5d/76tx7JYbKQTcgFSU6VgJ3kKQv4zGTKr+a9T/KBvfRvGtSFgKDQGt/DBykQixV0vNWKIdzWErA==", "integrity": "sha512-d+ezl76gx6Jal08XngJUkXM4lFXK/5Ikl9Mh4HKDxSfGJXmZ9xG64XT2oivBzfxb/eQ62VfvoMkaCZUKJMVrBA==",
"dependencies": { "dependencies": {
"@babel/helper-module-imports": "^7.12.13", "@babel/helper-module-imports": "^7.13.12",
"@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-plugin-utils": "^7.13.0",
"babel-plugin-polyfill-corejs2": "^0.1.4", "babel-plugin-polyfill-corejs2": "^0.2.0",
"babel-plugin-polyfill-corejs3": "^0.1.3", "babel-plugin-polyfill-corejs3": "^0.2.0",
"babel-plugin-polyfill-regenerator": "^0.1.2", "babel-plugin-polyfill-regenerator": "^0.2.0",
"semver": "^6.3.0" "semver": "^6.3.0"
}, },
"peerDependencies": { "peerDependencies": {
@ -1212,16 +1216,16 @@
} }
}, },
"node_modules/@babel/preset-env": { "node_modules/@babel/preset-env": {
"version": "7.13.12", "version": "7.13.15",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.12.tgz", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.15.tgz",
"integrity": "sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA==", "integrity": "sha512-D4JAPMXcxk69PKe81jRJ21/fP/uYdcTZ3hJDF5QX2HSI9bBxxYw/dumdR6dGumhjxlprHPE4XWoPaqzZUVy2MA==",
"dependencies": { "dependencies": {
"@babel/compat-data": "^7.13.12", "@babel/compat-data": "^7.13.15",
"@babel/helper-compilation-targets": "^7.13.10", "@babel/helper-compilation-targets": "^7.13.13",
"@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-validator-option": "^7.12.17", "@babel/helper-validator-option": "^7.12.17",
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12",
"@babel/plugin-proposal-async-generator-functions": "^7.13.8", "@babel/plugin-proposal-async-generator-functions": "^7.13.15",
"@babel/plugin-proposal-class-properties": "^7.13.0", "@babel/plugin-proposal-class-properties": "^7.13.0",
"@babel/plugin-proposal-dynamic-import": "^7.13.8", "@babel/plugin-proposal-dynamic-import": "^7.13.8",
"@babel/plugin-proposal-export-namespace-from": "^7.12.13", "@babel/plugin-proposal-export-namespace-from": "^7.12.13",
@ -1269,7 +1273,7 @@
"@babel/plugin-transform-object-super": "^7.12.13", "@babel/plugin-transform-object-super": "^7.12.13",
"@babel/plugin-transform-parameters": "^7.13.0", "@babel/plugin-transform-parameters": "^7.13.0",
"@babel/plugin-transform-property-literals": "^7.12.13", "@babel/plugin-transform-property-literals": "^7.12.13",
"@babel/plugin-transform-regenerator": "^7.12.13", "@babel/plugin-transform-regenerator": "^7.13.15",
"@babel/plugin-transform-reserved-words": "^7.12.13", "@babel/plugin-transform-reserved-words": "^7.12.13",
"@babel/plugin-transform-shorthand-properties": "^7.12.13", "@babel/plugin-transform-shorthand-properties": "^7.12.13",
"@babel/plugin-transform-spread": "^7.13.0", "@babel/plugin-transform-spread": "^7.13.0",
@ -1279,10 +1283,10 @@
"@babel/plugin-transform-unicode-escapes": "^7.12.13", "@babel/plugin-transform-unicode-escapes": "^7.12.13",
"@babel/plugin-transform-unicode-regex": "^7.12.13", "@babel/plugin-transform-unicode-regex": "^7.12.13",
"@babel/preset-modules": "^0.1.4", "@babel/preset-modules": "^0.1.4",
"@babel/types": "^7.13.12", "@babel/types": "^7.13.14",
"babel-plugin-polyfill-corejs2": "^0.1.4", "babel-plugin-polyfill-corejs2": "^0.2.0",
"babel-plugin-polyfill-corejs3": "^0.1.3", "babel-plugin-polyfill-corejs3": "^0.2.0",
"babel-plugin-polyfill-regenerator": "^0.1.2", "babel-plugin-polyfill-regenerator": "^0.2.0",
"core-js-compat": "^3.9.0", "core-js-compat": "^3.9.0",
"semver": "^6.3.0" "semver": "^6.3.0"
}, },
@ -1362,16 +1366,16 @@
} }
}, },
"node_modules/@babel/traverse": { "node_modules/@babel/traverse": {
"version": "7.13.13", "version": "7.13.15",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz",
"integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==",
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.12.13", "@babel/code-frame": "^7.12.13",
"@babel/generator": "^7.13.9", "@babel/generator": "^7.13.9",
"@babel/helper-function-name": "^7.12.13", "@babel/helper-function-name": "^7.12.13",
"@babel/helper-split-export-declaration": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13",
"@babel/parser": "^7.13.13", "@babel/parser": "^7.13.15",
"@babel/types": "^7.13.13", "@babel/types": "^7.13.14",
"debug": "^4.1.0", "debug": "^4.1.0",
"globals": "^11.1.0" "globals": "^11.1.0"
} }
@ -2708,6 +2712,22 @@
"@types/node": "*" "@types/node": "*"
} }
}, },
"node_modules/@types/history": {
"version": "4.7.8",
"resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.8.tgz",
"integrity": "sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA==",
"dev": true
},
"node_modules/@types/hoist-non-react-statics": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
"integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==",
"dev": true,
"dependencies": {
"@types/react": "*",
"hoist-non-react-statics": "^3.3.0"
}
},
"node_modules/@types/istanbul-lib-coverage": { "node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
@ -2783,6 +2803,45 @@
"csstype": "^3.0.2" "csstype": "^3.0.2"
} }
}, },
"node_modules/@types/react-dom": {
"version": "17.0.3",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.3.tgz",
"integrity": "sha512-4NnJbCeWE+8YBzupn/YrJxZ8VnjcJq5iR1laqQ1vkpQgBiA7bwk0Rp24fxsdNinzJY2U+HHS4dJJDPdoMjdJ7w==",
"dev": true,
"dependencies": {
"@types/react": "*"
}
},
"node_modules/@types/react-helmet": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.1.tgz",
"integrity": "sha512-VmSCMz6jp/06DABoY60vQa++h1YFt0PfAI23llxBJHbowqFgLUL0dhS1AQeVPNqYfRp9LAfokrfWACTNeobOrg==",
"dev": true,
"dependencies": {
"@types/react": "*"
}
},
"node_modules/@types/react-router": {
"version": "5.1.13",
"resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.13.tgz",
"integrity": "sha512-ZIuaO9Yrln54X6elg8q2Ivp6iK6p4syPsefEYAhRDAoqNh48C8VYUmB9RkXjKSQAJSJV0mbIFCX7I4vZDcHrjg==",
"dev": true,
"dependencies": {
"@types/history": "*",
"@types/react": "*"
}
},
"node_modules/@types/react-router-dom": {
"version": "5.1.7",
"resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.7.tgz",
"integrity": "sha512-D5mHD6TbdV/DNHYsnwBTv+y73ei+mMjrkGrla86HthE4/PVvL1J94Bu3qABU+COXzpL23T1EZapVVpwHuBXiUg==",
"dev": true,
"dependencies": {
"@types/history": "*",
"@types/react": "*",
"@types/react-router": "*"
}
},
"node_modules/@types/resolve": { "node_modules/@types/resolve": {
"version": "1.17.1", "version": "1.17.1",
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
@ -2803,6 +2862,17 @@
"integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==",
"dev": true "dev": true
}, },
"node_modules/@types/styled-components": {
"version": "5.1.9",
"resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.9.tgz",
"integrity": "sha512-kbEG6YlwK8rucITpKEr6pA4Ho9KSQHUUOzZ9lY3va1mtcjvS3D0wDciFyHEiNHKLL/npZCKDQJqm0x44sPO9oA==",
"dev": true,
"dependencies": {
"@types/hoist-non-react-statics": "*",
"@types/react": "*",
"csstype": "^3.0.2"
}
},
"node_modules/@types/testing-library__jest-dom": { "node_modules/@types/testing-library__jest-dom": {
"version": "5.9.5", "version": "5.9.5",
"resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.9.5.tgz", "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.9.5.tgz",
@ -3477,12 +3547,12 @@
} }
}, },
"node_modules/babel-plugin-polyfill-corejs2": { "node_modules/babel-plugin-polyfill-corejs2": {
"version": "0.1.10", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz",
"integrity": "sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA==", "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==",
"dependencies": { "dependencies": {
"@babel/compat-data": "^7.13.0", "@babel/compat-data": "^7.13.11",
"@babel/helper-define-polyfill-provider": "^0.1.5", "@babel/helper-define-polyfill-provider": "^0.2.0",
"semver": "^6.1.1" "semver": "^6.1.1"
}, },
"peerDependencies": { "peerDependencies": {
@ -3498,23 +3568,23 @@
} }
}, },
"node_modules/babel-plugin-polyfill-corejs3": { "node_modules/babel-plugin-polyfill-corejs3": {
"version": "0.1.7", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz",
"integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==",
"dependencies": { "dependencies": {
"@babel/helper-define-polyfill-provider": "^0.1.5", "@babel/helper-define-polyfill-provider": "^0.2.0",
"core-js-compat": "^3.8.1" "core-js-compat": "^3.9.1"
}, },
"peerDependencies": { "peerDependencies": {
"@babel/core": "^7.0.0-0" "@babel/core": "^7.0.0-0"
} }
}, },
"node_modules/babel-plugin-polyfill-regenerator": { "node_modules/babel-plugin-polyfill-regenerator": {
"version": "0.1.6", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz",
"integrity": "sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg==", "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==",
"dependencies": { "dependencies": {
"@babel/helper-define-polyfill-provider": "^0.1.5" "@babel/helper-define-polyfill-provider": "^0.2.0"
}, },
"peerDependencies": { "peerDependencies": {
"@babel/core": "^7.0.0-0" "@babel/core": "^7.0.0-0"
@ -4433,9 +4503,9 @@
} }
}, },
"node_modules/core-js-compat": { "node_modules/core-js-compat": {
"version": "3.10.0", "version": "3.10.1",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.10.0.tgz", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.10.1.tgz",
"integrity": "sha512-9yVewub2MXNYyGvuLnMHcN1k9RkvB7/ofktpeKTIaASyB88YYqGzUnu0ywMMhJrDHOMiTjSHWGzR+i7Wb9Z1kQ==", "integrity": "sha512-ZHQTdTPkqvw2CeHiZC970NNJcnwzT6YIueDMASKt+p3WbZsLXOcoD392SkcWhkC0wBBHhlfhqGKKsNCQUozYtg==",
"dependencies": { "dependencies": {
"browserslist": "^4.16.3", "browserslist": "^4.16.3",
"semver": "7.0.0" "semver": "7.0.0"
@ -5051,9 +5121,9 @@
} }
}, },
"node_modules/eslint": { "node_modules/eslint": {
"version": "7.23.0", "version": "7.24.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.24.0.tgz",
"integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", "integrity": "sha512-k9gaHeHiFmGCDQ2rEfvULlSLruz6tgfA8DEn+rY9/oYPFFTlz55mM/Q/Rij1b2Y42jwZiK3lXvNTw6w6TXzcKQ==",
"dependencies": { "dependencies": {
"@babel/code-frame": "7.12.11", "@babel/code-frame": "7.12.11",
"@eslint/eslintrc": "^0.4.0", "@eslint/eslintrc": "^0.4.0",
@ -5104,9 +5174,9 @@
} }
}, },
"node_modules/eslint-plugin-jest": { "node_modules/eslint-plugin-jest": {
"version": "24.3.3", "version": "24.3.5",
"resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.3.3.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.3.5.tgz",
"integrity": "sha512-IQ9tLHyKEyBw1BM3IE13WxOXQm03h/7dy1KFknUVkoY2N2+Hw7lb/3YFz/4jwcrxXt2+KhA/GoiK7jt8aK19ww==", "integrity": "sha512-XG4rtxYDuJykuqhsOqokYIR84/C8pRihRtEpVskYLbIIKGwPNW2ySxdctuVzETZE+MbF/e7wmsnbNVpzM0rDug==",
"dependencies": { "dependencies": {
"@typescript-eslint/experimental-utils": "^4.0.1" "@typescript-eslint/experimental-utils": "^4.0.1"
}, },
@ -5124,9 +5194,9 @@
} }
}, },
"node_modules/eslint-plugin-jest-dom": { "node_modules/eslint-plugin-jest-dom": {
"version": "3.7.0", "version": "3.8.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-3.7.0.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-3.8.0.tgz",
"integrity": "sha512-pLbKIV/upcORNROKgO6Yca13HGTkXvgcI7qaqJSZ8mvGMqaDvQSEh+RoabjeLByMzJBmAzNx1AAT2dUYOAVidw==", "integrity": "sha512-TsBK1RSG8mXCJaOce+gcNLU8ORl5yx111/HnsTTL70qwfb1AtbcqGtpz2OvfI/Q23baMtWDVy4L1KHgJk0B1XQ==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.9.6", "@babel/runtime": "^7.9.6",
"@testing-library/dom": "^7.28.1", "@testing-library/dom": "^7.28.1",
@ -5142,9 +5212,9 @@
} }
}, },
"node_modules/eslint-plugin-react": { "node_modules/eslint-plugin-react": {
"version": "7.23.1", "version": "7.23.2",
"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.1.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz",
"integrity": "sha512-MvFGhZjI8Z4HusajmSw0ougGrq3Gs4vT/0WgwksZgf5RrLrRa2oYAw56okU4tZJl8+j7IYNuTM+2RnFEuTSdRQ==", "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==",
"dependencies": { "dependencies": {
"array-includes": "^3.1.3", "array-includes": "^3.1.3",
"array.prototype.flatmap": "^1.2.4", "array.prototype.flatmap": "^1.2.4",
@ -6330,6 +6400,7 @@
"version": "15.5.0", "version": "15.5.0",
"resolved": "https://registry.npmjs.org/graphql/-/graphql-15.5.0.tgz", "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.5.0.tgz",
"integrity": "sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA==", "integrity": "sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA==",
"peer": true,
"engines": { "engines": {
"node": ">= 10.x" "node": ">= 10.x"
} }
@ -6605,9 +6676,9 @@
} }
}, },
"node_modules/i18next": { "node_modules/i18next": {
"version": "20.1.0", "version": "20.2.1",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-20.1.0.tgz", "resolved": "https://registry.npmjs.org/i18next/-/i18next-20.2.1.tgz",
"integrity": "sha512-sV+ZwTM4Ik4d6wKdwNS/ocKmvXi6DFA/YHMgdQX3i4L5993jnbo1/j1pK/c4+zBOjexer4dt+c5JHsFj4CUoXQ==", "integrity": "sha512-JLruWDEQ3T6tKT6P7u+DsNtToMHUwUcQIYOMRcnNBdUhSfKkoIDUKdVDKgGtmqr//LrirxjADUdr3d5Gwbow6g==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.12.0" "@babel/runtime": "^7.12.0"
} }
@ -13169,6 +13240,18 @@
"is-typedarray": "^1.0.0" "is-typedarray": "^1.0.0"
} }
}, },
"node_modules/typescript": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz",
"integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=4.2.0"
}
},
"node_modules/ua-parser-js": { "node_modules/ua-parser-js": {
"version": "0.7.24", "version": "0.7.24",
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.24.tgz", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.24.tgz",
@ -13866,9 +13949,9 @@
}, },
"dependencies": { "dependencies": {
"@apollo/client": { "@apollo/client": {
"version": "3.3.13", "version": "3.3.14",
"resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.3.13.tgz", "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.3.14.tgz",
"integrity": "sha512-usiVmXiOq0J/GpyIOIhlF8ItHpiPJObC7zoxLYPoOYj3G3OB0hCIcUKs3aTJ3ATW7u8QxvYgRaJg72NN7E1WOg==", "integrity": "sha512-z7YwMvF9grmpWUG+26e3gPcBAOA/r/Ci5gwK7JVm3bGYG9kKqG8MF6sMXEbuwTsFseE4duSp0icJ6tdzxJhhlA==",
"requires": { "requires": {
"@graphql-typed-document-node/core": "^3.0.0", "@graphql-typed-document-node/core": "^3.0.0",
"@types/zen-observable": "^0.8.0", "@types/zen-observable": "^0.8.0",
@ -13901,23 +13984,23 @@
} }
}, },
"@babel/compat-data": { "@babel/compat-data": {
"version": "7.13.12", "version": "7.13.15",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.15.tgz",
"integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==" "integrity": "sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA=="
}, },
"@babel/core": { "@babel/core": {
"version": "7.13.14", "version": "7.13.15",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.14.tgz", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz",
"integrity": "sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA==", "integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==",
"requires": { "requires": {
"@babel/code-frame": "^7.12.13", "@babel/code-frame": "^7.12.13",
"@babel/generator": "^7.13.9", "@babel/generator": "^7.13.9",
"@babel/helper-compilation-targets": "^7.13.13", "@babel/helper-compilation-targets": "^7.13.13",
"@babel/helper-module-transforms": "^7.13.14", "@babel/helper-module-transforms": "^7.13.14",
"@babel/helpers": "^7.13.10", "@babel/helpers": "^7.13.10",
"@babel/parser": "^7.13.13", "@babel/parser": "^7.13.15",
"@babel/template": "^7.12.13", "@babel/template": "^7.12.13",
"@babel/traverse": "^7.13.13", "@babel/traverse": "^7.13.15",
"@babel/types": "^7.13.14", "@babel/types": "^7.13.14",
"convert-source-map": "^1.7.0", "convert-source-map": "^1.7.0",
"debug": "^4.1.0", "debug": "^4.1.0",
@ -14017,9 +14100,9 @@
} }
}, },
"@babel/helper-define-polyfill-provider": { "@babel/helper-define-polyfill-provider": {
"version": "0.1.5", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz",
"integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==",
"requires": { "requires": {
"@babel/helper-compilation-targets": "^7.13.0", "@babel/helper-compilation-targets": "^7.13.0",
"@babel/helper-module-imports": "^7.12.13", "@babel/helper-module-imports": "^7.12.13",
@ -14204,9 +14287,9 @@
} }
}, },
"@babel/parser": { "@babel/parser": {
"version": "7.13.13", "version": "7.13.15",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz",
"integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==" "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ=="
}, },
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
"version": "7.13.12", "version": "7.13.12",
@ -14219,9 +14302,9 @@
} }
}, },
"@babel/plugin-proposal-async-generator-functions": { "@babel/plugin-proposal-async-generator-functions": {
"version": "7.13.8", "version": "7.13.15",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz",
"integrity": "sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==", "integrity": "sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==",
"requires": { "requires": {
"@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-remap-async-to-generator": "^7.13.0", "@babel/helper-remap-async-to-generator": "^7.13.0",
@ -14704,9 +14787,9 @@
} }
}, },
"@babel/plugin-transform-regenerator": { "@babel/plugin-transform-regenerator": {
"version": "7.12.13", "version": "7.13.15",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz",
"integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==", "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==",
"requires": { "requires": {
"regenerator-transform": "^0.14.2" "regenerator-transform": "^0.14.2"
} }
@ -14720,15 +14803,15 @@
} }
}, },
"@babel/plugin-transform-runtime": { "@babel/plugin-transform-runtime": {
"version": "7.13.10", "version": "7.13.15",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.10.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.15.tgz",
"integrity": "sha512-Y5k8ipgfvz5d/76tx7JYbKQTcgFSU6VgJ3kKQv4zGTKr+a9T/KBvfRvGtSFgKDQGt/DBykQixV0vNWKIdzWErA==", "integrity": "sha512-d+ezl76gx6Jal08XngJUkXM4lFXK/5Ikl9Mh4HKDxSfGJXmZ9xG64XT2oivBzfxb/eQ62VfvoMkaCZUKJMVrBA==",
"requires": { "requires": {
"@babel/helper-module-imports": "^7.12.13", "@babel/helper-module-imports": "^7.13.12",
"@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-plugin-utils": "^7.13.0",
"babel-plugin-polyfill-corejs2": "^0.1.4", "babel-plugin-polyfill-corejs2": "^0.2.0",
"babel-plugin-polyfill-corejs3": "^0.1.3", "babel-plugin-polyfill-corejs3": "^0.2.0",
"babel-plugin-polyfill-regenerator": "^0.1.2", "babel-plugin-polyfill-regenerator": "^0.2.0",
"semver": "^6.3.0" "semver": "^6.3.0"
}, },
"dependencies": { "dependencies": {
@ -14798,16 +14881,16 @@
} }
}, },
"@babel/preset-env": { "@babel/preset-env": {
"version": "7.13.12", "version": "7.13.15",
"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.12.tgz", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.15.tgz",
"integrity": "sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA==", "integrity": "sha512-D4JAPMXcxk69PKe81jRJ21/fP/uYdcTZ3hJDF5QX2HSI9bBxxYw/dumdR6dGumhjxlprHPE4XWoPaqzZUVy2MA==",
"requires": { "requires": {
"@babel/compat-data": "^7.13.12", "@babel/compat-data": "^7.13.15",
"@babel/helper-compilation-targets": "^7.13.10", "@babel/helper-compilation-targets": "^7.13.13",
"@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-plugin-utils": "^7.13.0",
"@babel/helper-validator-option": "^7.12.17", "@babel/helper-validator-option": "^7.12.17",
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12",
"@babel/plugin-proposal-async-generator-functions": "^7.13.8", "@babel/plugin-proposal-async-generator-functions": "^7.13.15",
"@babel/plugin-proposal-class-properties": "^7.13.0", "@babel/plugin-proposal-class-properties": "^7.13.0",
"@babel/plugin-proposal-dynamic-import": "^7.13.8", "@babel/plugin-proposal-dynamic-import": "^7.13.8",
"@babel/plugin-proposal-export-namespace-from": "^7.12.13", "@babel/plugin-proposal-export-namespace-from": "^7.12.13",
@ -14855,7 +14938,7 @@
"@babel/plugin-transform-object-super": "^7.12.13", "@babel/plugin-transform-object-super": "^7.12.13",
"@babel/plugin-transform-parameters": "^7.13.0", "@babel/plugin-transform-parameters": "^7.13.0",
"@babel/plugin-transform-property-literals": "^7.12.13", "@babel/plugin-transform-property-literals": "^7.12.13",
"@babel/plugin-transform-regenerator": "^7.12.13", "@babel/plugin-transform-regenerator": "^7.13.15",
"@babel/plugin-transform-reserved-words": "^7.12.13", "@babel/plugin-transform-reserved-words": "^7.12.13",
"@babel/plugin-transform-shorthand-properties": "^7.12.13", "@babel/plugin-transform-shorthand-properties": "^7.12.13",
"@babel/plugin-transform-spread": "^7.13.0", "@babel/plugin-transform-spread": "^7.13.0",
@ -14865,10 +14948,10 @@
"@babel/plugin-transform-unicode-escapes": "^7.12.13", "@babel/plugin-transform-unicode-escapes": "^7.12.13",
"@babel/plugin-transform-unicode-regex": "^7.12.13", "@babel/plugin-transform-unicode-regex": "^7.12.13",
"@babel/preset-modules": "^0.1.4", "@babel/preset-modules": "^0.1.4",
"@babel/types": "^7.13.12", "@babel/types": "^7.13.14",
"babel-plugin-polyfill-corejs2": "^0.1.4", "babel-plugin-polyfill-corejs2": "^0.2.0",
"babel-plugin-polyfill-corejs3": "^0.1.3", "babel-plugin-polyfill-corejs3": "^0.2.0",
"babel-plugin-polyfill-regenerator": "^0.1.2", "babel-plugin-polyfill-regenerator": "^0.2.0",
"core-js-compat": "^3.9.0", "core-js-compat": "^3.9.0",
"semver": "^6.3.0" "semver": "^6.3.0"
}, },
@ -14943,16 +15026,16 @@
} }
}, },
"@babel/traverse": { "@babel/traverse": {
"version": "7.13.13", "version": "7.13.15",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz",
"integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==",
"requires": { "requires": {
"@babel/code-frame": "^7.12.13", "@babel/code-frame": "^7.12.13",
"@babel/generator": "^7.13.9", "@babel/generator": "^7.13.9",
"@babel/helper-function-name": "^7.12.13", "@babel/helper-function-name": "^7.12.13",
"@babel/helper-split-export-declaration": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13",
"@babel/parser": "^7.13.13", "@babel/parser": "^7.13.15",
"@babel/types": "^7.13.13", "@babel/types": "^7.13.14",
"debug": "^4.1.0", "debug": "^4.1.0",
"globals": "^11.1.0" "globals": "^11.1.0"
}, },
@ -16045,6 +16128,22 @@
"@types/node": "*" "@types/node": "*"
} }
}, },
"@types/history": {
"version": "4.7.8",
"resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.8.tgz",
"integrity": "sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA==",
"dev": true
},
"@types/hoist-non-react-statics": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
"integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==",
"dev": true,
"requires": {
"@types/react": "*",
"hoist-non-react-statics": "^3.3.0"
}
},
"@types/istanbul-lib-coverage": { "@types/istanbul-lib-coverage": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
@ -16120,6 +16219,45 @@
"csstype": "^3.0.2" "csstype": "^3.0.2"
} }
}, },
"@types/react-dom": {
"version": "17.0.3",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.3.tgz",
"integrity": "sha512-4NnJbCeWE+8YBzupn/YrJxZ8VnjcJq5iR1laqQ1vkpQgBiA7bwk0Rp24fxsdNinzJY2U+HHS4dJJDPdoMjdJ7w==",
"dev": true,
"requires": {
"@types/react": "*"
}
},
"@types/react-helmet": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/@types/react-helmet/-/react-helmet-6.1.1.tgz",
"integrity": "sha512-VmSCMz6jp/06DABoY60vQa++h1YFt0PfAI23llxBJHbowqFgLUL0dhS1AQeVPNqYfRp9LAfokrfWACTNeobOrg==",
"dev": true,
"requires": {
"@types/react": "*"
}
},
"@types/react-router": {
"version": "5.1.13",
"resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.13.tgz",
"integrity": "sha512-ZIuaO9Yrln54X6elg8q2Ivp6iK6p4syPsefEYAhRDAoqNh48C8VYUmB9RkXjKSQAJSJV0mbIFCX7I4vZDcHrjg==",
"dev": true,
"requires": {
"@types/history": "*",
"@types/react": "*"
}
},
"@types/react-router-dom": {
"version": "5.1.7",
"resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.7.tgz",
"integrity": "sha512-D5mHD6TbdV/DNHYsnwBTv+y73ei+mMjrkGrla86HthE4/PVvL1J94Bu3qABU+COXzpL23T1EZapVVpwHuBXiUg==",
"dev": true,
"requires": {
"@types/history": "*",
"@types/react": "*",
"@types/react-router": "*"
}
},
"@types/resolve": { "@types/resolve": {
"version": "1.17.1", "version": "1.17.1",
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
@ -16140,6 +16278,17 @@
"integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==",
"dev": true "dev": true
}, },
"@types/styled-components": {
"version": "5.1.9",
"resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.9.tgz",
"integrity": "sha512-kbEG6YlwK8rucITpKEr6pA4Ho9KSQHUUOzZ9lY3va1mtcjvS3D0wDciFyHEiNHKLL/npZCKDQJqm0x44sPO9oA==",
"dev": true,
"requires": {
"@types/hoist-non-react-statics": "*",
"@types/react": "*",
"csstype": "^3.0.2"
}
},
"@types/testing-library__jest-dom": { "@types/testing-library__jest-dom": {
"version": "5.9.5", "version": "5.9.5",
"resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.9.5.tgz", "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.9.5.tgz",
@ -16682,12 +16831,12 @@
} }
}, },
"babel-plugin-polyfill-corejs2": { "babel-plugin-polyfill-corejs2": {
"version": "0.1.10", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz",
"integrity": "sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA==", "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==",
"requires": { "requires": {
"@babel/compat-data": "^7.13.0", "@babel/compat-data": "^7.13.11",
"@babel/helper-define-polyfill-provider": "^0.1.5", "@babel/helper-define-polyfill-provider": "^0.2.0",
"semver": "^6.1.1" "semver": "^6.1.1"
}, },
"dependencies": { "dependencies": {
@ -16699,20 +16848,20 @@
} }
}, },
"babel-plugin-polyfill-corejs3": { "babel-plugin-polyfill-corejs3": {
"version": "0.1.7", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz",
"integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==",
"requires": { "requires": {
"@babel/helper-define-polyfill-provider": "^0.1.5", "@babel/helper-define-polyfill-provider": "^0.2.0",
"core-js-compat": "^3.8.1" "core-js-compat": "^3.9.1"
} }
}, },
"babel-plugin-polyfill-regenerator": { "babel-plugin-polyfill-regenerator": {
"version": "0.1.6", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz",
"integrity": "sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg==", "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==",
"requires": { "requires": {
"@babel/helper-define-polyfill-provider": "^0.1.5" "@babel/helper-define-polyfill-provider": "^0.2.0"
} }
}, },
"babel-plugin-styled-components": { "babel-plugin-styled-components": {
@ -17466,9 +17615,9 @@
} }
}, },
"core-js-compat": { "core-js-compat": {
"version": "3.10.0", "version": "3.10.1",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.10.0.tgz", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.10.1.tgz",
"integrity": "sha512-9yVewub2MXNYyGvuLnMHcN1k9RkvB7/ofktpeKTIaASyB88YYqGzUnu0ywMMhJrDHOMiTjSHWGzR+i7Wb9Z1kQ==", "integrity": "sha512-ZHQTdTPkqvw2CeHiZC970NNJcnwzT6YIueDMASKt+p3WbZsLXOcoD392SkcWhkC0wBBHhlfhqGKKsNCQUozYtg==",
"requires": { "requires": {
"browserslist": "^4.16.3", "browserslist": "^4.16.3",
"semver": "7.0.0" "semver": "7.0.0"
@ -17965,9 +18114,9 @@
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
}, },
"eslint": { "eslint": {
"version": "7.23.0", "version": "7.24.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.24.0.tgz",
"integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", "integrity": "sha512-k9gaHeHiFmGCDQ2rEfvULlSLruz6tgfA8DEn+rY9/oYPFFTlz55mM/Q/Rij1b2Y42jwZiK3lXvNTw6w6TXzcKQ==",
"requires": { "requires": {
"@babel/code-frame": "7.12.11", "@babel/code-frame": "7.12.11",
"@eslint/eslintrc": "^0.4.0", "@eslint/eslintrc": "^0.4.0",
@ -18148,17 +18297,17 @@
} }
}, },
"eslint-plugin-jest": { "eslint-plugin-jest": {
"version": "24.3.3", "version": "24.3.5",
"resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.3.3.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.3.5.tgz",
"integrity": "sha512-IQ9tLHyKEyBw1BM3IE13WxOXQm03h/7dy1KFknUVkoY2N2+Hw7lb/3YFz/4jwcrxXt2+KhA/GoiK7jt8aK19ww==", "integrity": "sha512-XG4rtxYDuJykuqhsOqokYIR84/C8pRihRtEpVskYLbIIKGwPNW2ySxdctuVzETZE+MbF/e7wmsnbNVpzM0rDug==",
"requires": { "requires": {
"@typescript-eslint/experimental-utils": "^4.0.1" "@typescript-eslint/experimental-utils": "^4.0.1"
} }
}, },
"eslint-plugin-jest-dom": { "eslint-plugin-jest-dom": {
"version": "3.7.0", "version": "3.8.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-3.7.0.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-3.8.0.tgz",
"integrity": "sha512-pLbKIV/upcORNROKgO6Yca13HGTkXvgcI7qaqJSZ8mvGMqaDvQSEh+RoabjeLByMzJBmAzNx1AAT2dUYOAVidw==", "integrity": "sha512-TsBK1RSG8mXCJaOce+gcNLU8ORl5yx111/HnsTTL70qwfb1AtbcqGtpz2OvfI/Q23baMtWDVy4L1KHgJk0B1XQ==",
"requires": { "requires": {
"@babel/runtime": "^7.9.6", "@babel/runtime": "^7.9.6",
"@testing-library/dom": "^7.28.1", "@testing-library/dom": "^7.28.1",
@ -18166,9 +18315,9 @@
} }
}, },
"eslint-plugin-react": { "eslint-plugin-react": {
"version": "7.23.1", "version": "7.23.2",
"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.1.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz",
"integrity": "sha512-MvFGhZjI8Z4HusajmSw0ougGrq3Gs4vT/0WgwksZgf5RrLrRa2oYAw56okU4tZJl8+j7IYNuTM+2RnFEuTSdRQ==", "integrity": "sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw==",
"requires": { "requires": {
"array-includes": "^3.1.3", "array-includes": "^3.1.3",
"array.prototype.flatmap": "^1.2.4", "array.prototype.flatmap": "^1.2.4",
@ -18939,7 +19088,8 @@
"graphql": { "graphql": {
"version": "15.5.0", "version": "15.5.0",
"resolved": "https://registry.npmjs.org/graphql/-/graphql-15.5.0.tgz", "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.5.0.tgz",
"integrity": "sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA==" "integrity": "sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA==",
"peer": true
}, },
"graphql-tag": { "graphql-tag": {
"version": "2.12.3", "version": "2.12.3",
@ -19159,9 +19309,9 @@
"dev": true "dev": true
}, },
"i18next": { "i18next": {
"version": "20.1.0", "version": "20.2.1",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-20.1.0.tgz", "resolved": "https://registry.npmjs.org/i18next/-/i18next-20.2.1.tgz",
"integrity": "sha512-sV+ZwTM4Ik4d6wKdwNS/ocKmvXi6DFA/YHMgdQX3i4L5993jnbo1/j1pK/c4+zBOjexer4dt+c5JHsFj4CUoXQ==", "integrity": "sha512-JLruWDEQ3T6tKT6P7u+DsNtToMHUwUcQIYOMRcnNBdUhSfKkoIDUKdVDKgGtmqr//LrirxjADUdr3d5Gwbow6g==",
"requires": { "requires": {
"@babel/runtime": "^7.12.0" "@babel/runtime": "^7.12.0"
} }
@ -24405,6 +24555,11 @@
"is-typedarray": "^1.0.0" "is-typedarray": "^1.0.0"
} }
}, },
"typescript": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz",
"integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg=="
},
"ua-parser-js": { "ua-parser-js": {
"version": "0.7.24", "version": "0.7.24",
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.24.tgz", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.24.tgz",

View File

@ -9,11 +9,11 @@
"license": "GPL-3.0", "license": "GPL-3.0",
"description": "UI app for Photoview", "description": "UI app for Photoview",
"dependencies": { "dependencies": {
"@apollo/client": "^3.3.13", "@apollo/client": "^3.3.14",
"@babel/core": "^7.13.14", "@babel/core": "^7.13.15",
"@babel/plugin-transform-modules-commonjs": "^7.13.8", "@babel/plugin-transform-modules-commonjs": "^7.13.8",
"@babel/plugin-transform-runtime": "^7.13.10", "@babel/plugin-transform-runtime": "^7.13.15",
"@babel/preset-env": "^7.13.12", "@babel/preset-env": "^7.13.15",
"@babel/preset-react": "^7.13.13", "@babel/preset-react": "^7.13.13",
"babel-eslint": "^10.1.0", "babel-eslint": "^10.1.0",
"babel-jest": "^26.6.3", "babel-jest": "^26.6.3",
@ -27,14 +27,13 @@
"dotenv": "^8.2.0", "dotenv": "^8.2.0",
"esbuild": "^0.8.52", "esbuild": "^0.8.52",
"esbuild-plugin-babel": "^0.2.3", "esbuild-plugin-babel": "^0.2.3",
"eslint": "^7.23.0", "eslint": "^7.24.0",
"eslint-plugin-jest": "^24.3.3", "eslint-plugin-jest": "^24.3.5",
"eslint-plugin-jest-dom": "^3.7.0", "eslint-plugin-jest-dom": "^3.8.0",
"eslint-plugin-react": "^7.23.1", "eslint-plugin-react": "^7.23.2",
"eslint-plugin-react-hooks": "^4.2.0", "eslint-plugin-react-hooks": "^4.2.0",
"fs-extra": "^9.1.0", "fs-extra": "^9.1.0",
"graphql": "^15.5.0", "i18next": "^20.2.1",
"i18next": "^20.1.0",
"mapbox-gl": "^2.2.0", "mapbox-gl": "^2.2.0",
"prop-types": "^15.7.2", "prop-types": "^15.7.2",
"react": "^17.0.2", "react": "^17.0.2",
@ -49,6 +48,7 @@
"semantic-ui-react": "^2.0.3", "semantic-ui-react": "^2.0.3",
"styled-components": "^5.2.3", "styled-components": "^5.2.3",
"subscriptions-transport-ws": "^0.9.18", "subscriptions-transport-ws": "^0.9.18",
"typescript": "^4.2.4",
"url-join": "^4.0.1", "url-join": "^4.0.1",
"workbox-build": "^6.1.2" "workbox-build": "^6.1.2"
}, },
@ -58,12 +58,17 @@
"test": "npm run lint && npm run jest", "test": "npm run lint && npm run jest",
"lint": "eslint ./src --max-warnings 0 --cache", "lint": "eslint ./src --max-warnings 0 --cache",
"jest": "jest", "jest": "jest",
"genSchemaTypes": "npx apollo client:codegen --target=typescript",
"prepare": "(cd .. && npx husky install)" "prepare": "(cd .. && npx husky install)"
}, },
"devDependencies": { "devDependencies": {
"@testing-library/jest-dom": "^5.11.10", "@testing-library/jest-dom": "^5.11.10",
"@testing-library/react": "^11.2.6", "@testing-library/react": "^11.2.6",
"@types/react": "^17.0.3", "@types/react": "^17.0.3",
"@types/react-dom": "^17.0.3",
"@types/react-helmet": "^6.1.1",
"@types/react-router-dom": "^5.1.7",
"@types/styled-components": "^5.1.9",
"husky": "^6.0.0", "husky": "^6.0.0",
"jest": "^26.6.3", "jest": "^26.6.3",
"lint-staged": "^10.5.4", "lint-staged": "^10.5.4",
@ -91,9 +96,5 @@
"lint-staged": { "lint-staged": {
"*.{js,json,css,md,graphql}": "prettier --write", "*.{js,json,css,md,graphql}": "prettier --write",
"*.js": "eslint --cache --fix --max-warnings 0" "*.js": "eslint --cache --fix --max-warnings 0"
}, }
"sideEffects": [
"./src/index.js",
"./src/localization.js"
]
} }

View File

@ -30,9 +30,12 @@ const GlobalStyle = createGlobalStyle`
` `
import 'semantic-ui-css/semantic.min.css' import 'semantic-ui-css/semantic.min.css'
import { siteTranslation } from './__generated__/siteTranslation'
import { LanguageTranslation } from '../__generated__/globalTypes'
import { useTranslation } from 'react-i18next'
const SITE_TRANSLATION = gql` const SITE_TRANSLATION = gql`
query { query siteTranslation {
myUserPreferences { myUserPreferences {
id id
language language
@ -41,7 +44,7 @@ const SITE_TRANSLATION = gql`
` `
const loadTranslations = () => { const loadTranslations = () => {
const [loadLang, { data }] = useLazyQuery(SITE_TRANSLATION) const [loadLang, { data }] = useLazyQuery<siteTranslation>(SITE_TRANSLATION)
useEffect(() => { useEffect(() => {
if (authToken()) { if (authToken()) {
@ -51,7 +54,7 @@ const loadTranslations = () => {
useEffect(() => { useEffect(() => {
switch (data?.myUserPreferences.language) { switch (data?.myUserPreferences.language) {
case 'da': case LanguageTranslation.Danish:
import('../extractedTranslations/da/translation.json').then(danish => { import('../extractedTranslations/da/translation.json').then(danish => {
i18n.addResourceBundle('da', 'translation', danish) i18n.addResourceBundle('da', 'translation', danish)
i18n.changeLanguage('da') i18n.changeLanguage('da')
@ -64,6 +67,7 @@ const loadTranslations = () => {
} }
const App = () => { const App = () => {
const { t } = useTranslation()
loadTranslations() loadTranslations()
return ( return (
@ -71,7 +75,10 @@ const App = () => {
<Helmet> <Helmet>
<meta <meta
name="description" name="description"
content="Simple and User-friendly Photo Gallery for Personal Servers" content={t(
'meta.description',
'Simple and User-friendly Photo Gallery for Personal Servers'
)}
/> />
</Helmet> </Helmet>
<GlobalStyle /> <GlobalStyle />

View File

@ -1,4 +1,4 @@
import React from 'react' import React, { ReactChild, ReactChildren } from 'react'
import PropTypes from 'prop-types' import PropTypes from 'prop-types'
import styled from 'styled-components' import styled from 'styled-components'
import { NavLink } from 'react-router-dom' import { NavLink } from 'react-router-dom'
@ -79,16 +79,28 @@ const SideButtonLink = styled(NavLink)`
} }
` `
const SideButton = props => { type SideButtonProps = {
return ( children: any
<SideButtonLink {...props} activeStyle={{ color: '#4183c4' }}> to: string
{props.children} exact: boolean
</SideButtonLink>
)
} }
SideButton.propTypes = { const SideButton = ({
children: PropTypes.any, children,
to,
exact,
...otherProps
}: SideButtonProps) => {
return (
<SideButtonLink
{...otherProps}
to={to}
exact={exact}
activeStyle={{ color: '#4183c4' }}
>
{children}
</SideButtonLink>
)
} }
const SideButtonLabel = styled.div` const SideButtonLabel = styled.div`
@ -130,7 +142,12 @@ export const SideMenu = () => {
) )
} }
const Layout = ({ children, title, ...otherProps }) => { type LayoutProps = {
children: ReactChild | ReactChildren
title: string
}
const Layout = ({ children, title, ...otherProps }: LayoutProps) => {
return ( return (
<Container {...otherProps} data-testid="Layout"> <Container {...otherProps} data-testid="Layout">
<Helmet> <Helmet>

View File

@ -0,0 +1,118 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
import { OrderDirection, MediaType } from "./../../../../__generated__/globalTypes";
// ====================================================
// GraphQL query operation: albumQuery
// ====================================================
export interface albumQuery_album_subAlbums_thumbnail_thumbnail {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
}
export interface albumQuery_album_subAlbums_thumbnail {
__typename: "Media";
/**
* URL to display the media in a smaller resolution
*/
thumbnail: albumQuery_album_subAlbums_thumbnail_thumbnail | null;
}
export interface albumQuery_album_subAlbums {
__typename: "Album";
id: string;
title: string;
/**
* An image in this album used for previewing this album
*/
thumbnail: albumQuery_album_subAlbums_thumbnail | null;
}
export interface albumQuery_album_media_thumbnail {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
/**
* Width of the image in pixels
*/
width: number;
/**
* Height of the image in pixels
*/
height: number;
}
export interface albumQuery_album_media_highRes {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
}
export interface albumQuery_album_media_videoWeb {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
}
export interface albumQuery_album_media {
__typename: "Media";
id: string;
type: MediaType;
/**
* URL to display the media in a smaller resolution
*/
thumbnail: albumQuery_album_media_thumbnail | null;
/**
* URL to display the photo in full resolution, will be null for videos
*/
highRes: albumQuery_album_media_highRes | null;
/**
* URL to get the video in a web format that can be played in the browser, will be null for photos
*/
videoWeb: albumQuery_album_media_videoWeb | null;
favorite: boolean;
}
export interface albumQuery_album {
__typename: "Album";
id: string;
title: string;
/**
* The albums contained in this album
*/
subAlbums: albumQuery_album_subAlbums[];
/**
* The media inside this album
*/
media: albumQuery_album_media[];
}
export interface albumQuery {
/**
* Get album by id, user must own the album or be admin
* If valid tokenCredentials are provided, the album may be retrived without further authentication
*/
album: albumQuery_album;
}
export interface albumQueryVariables {
id: string;
onlyFavorites?: boolean | null;
mediaOrderBy?: string | null;
mediaOrderDirection?: OrderDirection | null;
limit?: number | null;
offset?: number | null;
}

View File

@ -0,0 +1,41 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL query operation: getMyAlbums
// ====================================================
export interface getMyAlbums_myAlbums_thumbnail_thumbnail {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
}
export interface getMyAlbums_myAlbums_thumbnail {
__typename: "Media";
/**
* URL to display the media in a smaller resolution
*/
thumbnail: getMyAlbums_myAlbums_thumbnail_thumbnail | null;
}
export interface getMyAlbums_myAlbums {
__typename: "Album";
id: string;
title: string;
/**
* An image in this album used for previewing this album
*/
thumbnail: getMyAlbums_myAlbums_thumbnail | null;
}
export interface getMyAlbums {
/**
* List of albums owned by the logged in user.
*/
myAlbums: getMyAlbums_myAlbums[];
}

View File

@ -0,0 +1,24 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: Authorize
// ====================================================
export interface Authorize_authorizeUser {
__typename: "AuthorizeResult";
success: boolean;
status: string;
token: string | null;
}
export interface Authorize {
authorizeUser: Authorize_authorizeUser;
}
export interface AuthorizeVariables {
username: string;
password: string;
}

View File

@ -0,0 +1,17 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL query operation: CheckInitialSetup
// ====================================================
export interface CheckInitialSetup_siteInfo {
__typename: "SiteInfo";
initialSetup: boolean;
}
export interface CheckInitialSetup {
siteInfo: CheckInitialSetup_siteInfo;
}

View File

@ -0,0 +1,28 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: InitialSetup
// ====================================================
export interface InitialSetup_initialSetupWizard {
__typename: "AuthorizeResult";
success: boolean;
status: string;
token: string | null;
}
export interface InitialSetup {
/**
* Registers the initial user, can only be called if initialSetup from SiteInfo is true
*/
initialSetupWizard: InitialSetup_initialSetupWizard | null;
}
export interface InitialSetupVariables {
username: string;
password: string;
rootPath: string;
}

View File

@ -39,7 +39,7 @@ export const MY_FACES_QUERY = gql`
` `
export const SET_GROUP_LABEL_MUTATION = gql` export const SET_GROUP_LABEL_MUTATION = gql`
mutation($groupID: ID!, $label: String) { mutation setGroupLabel($groupID: ID!, $label: String) {
setFaceGroupLabel(faceGroupID: $groupID, label: $label) { setFaceGroupLabel(faceGroupID: $groupID, label: $label) {
id id
label label

View File

@ -7,7 +7,7 @@ import { MY_FACES_QUERY } from '../PeoplePage'
import SelectFaceGroupTable from './SelectFaceGroupTable' import SelectFaceGroupTable from './SelectFaceGroupTable'
const COMBINE_FACES_MUTATION = gql` const COMBINE_FACES_MUTATION = gql`
mutation($destID: ID!, $srcID: ID!) { mutation combineFaces($destID: ID!, $srcID: ID!) {
combineFaceGroups( combineFaceGroups(
destinationFaceGroupID: $destID destinationFaceGroupID: $destID
sourceFaceGroupID: $srcID sourceFaceGroupID: $srcID

View File

@ -0,0 +1,25 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: combineFaces
// ====================================================
export interface combineFaces_combineFaceGroups {
__typename: "FaceGroup";
id: string;
}
export interface combineFaces {
/**
* Merge two face groups into a single one, all ImageFaces from source will be moved to destination
*/
combineFaceGroups: combineFaces_combineFaceGroups;
}
export interface combineFacesVariables {
destID: string;
srcID: string;
}

View File

@ -0,0 +1,25 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: detachImageFaces
// ====================================================
export interface detachImageFaces_detachImageFaces {
__typename: "FaceGroup";
id: string;
label: string | null;
}
export interface detachImageFaces {
/**
* Move a list of ImageFaces to a new face group
*/
detachImageFaces: detachImageFaces_detachImageFaces;
}
export interface detachImageFacesVariables {
faceIDs: string[];
}

View File

@ -0,0 +1,31 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: moveImageFaces
// ====================================================
export interface moveImageFaces_moveImageFaces_imageFaces {
__typename: "ImageFace";
id: string;
}
export interface moveImageFaces_moveImageFaces {
__typename: "FaceGroup";
id: string;
imageFaces: moveImageFaces_moveImageFaces_imageFaces[];
}
export interface moveImageFaces {
/**
* Move a list of ImageFaces to another face group
*/
moveImageFaces: moveImageFaces_moveImageFaces;
}
export interface moveImageFacesVariables {
faceIDs: string[];
destFaceGroupID: string;
}

View File

@ -0,0 +1,82 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
import { MediaType } from "./../../../../../__generated__/globalTypes";
// ====================================================
// GraphQL query operation: singleFaceGroup
// ====================================================
export interface singleFaceGroup_faceGroup_imageFaces_rectangle {
__typename: "FaceRectangle";
minX: number;
maxX: number;
minY: number;
maxY: number;
}
export interface singleFaceGroup_faceGroup_imageFaces_media_thumbnail {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
/**
* Width of the image in pixels
*/
width: number;
/**
* Height of the image in pixels
*/
height: number;
}
export interface singleFaceGroup_faceGroup_imageFaces_media_highRes {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
}
export interface singleFaceGroup_faceGroup_imageFaces_media {
__typename: "Media";
id: string;
type: MediaType;
title: string;
/**
* URL to display the media in a smaller resolution
*/
thumbnail: singleFaceGroup_faceGroup_imageFaces_media_thumbnail | null;
/**
* URL to display the photo in full resolution, will be null for videos
*/
highRes: singleFaceGroup_faceGroup_imageFaces_media_highRes | null;
favorite: boolean;
}
export interface singleFaceGroup_faceGroup_imageFaces {
__typename: "ImageFace";
id: string;
rectangle: singleFaceGroup_faceGroup_imageFaces_rectangle | null;
media: singleFaceGroup_faceGroup_imageFaces_media;
}
export interface singleFaceGroup_faceGroup {
__typename: "FaceGroup";
id: string;
label: string | null;
imageFaces: singleFaceGroup_faceGroup_imageFaces[];
}
export interface singleFaceGroup {
faceGroup: singleFaceGroup_faceGroup;
}
export interface singleFaceGroupVariables {
id: string;
limit: number;
offset: number;
}

View File

@ -0,0 +1,65 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL query operation: myFaces
// ====================================================
export interface myFaces_myFaceGroups_imageFaces_rectangle {
__typename: "FaceRectangle";
minX: number;
maxX: number;
minY: number;
maxY: number;
}
export interface myFaces_myFaceGroups_imageFaces_media_thumbnail {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
/**
* Width of the image in pixels
*/
width: number;
/**
* Height of the image in pixels
*/
height: number;
}
export interface myFaces_myFaceGroups_imageFaces_media {
__typename: "Media";
id: string;
/**
* URL to display the media in a smaller resolution
*/
thumbnail: myFaces_myFaceGroups_imageFaces_media_thumbnail | null;
}
export interface myFaces_myFaceGroups_imageFaces {
__typename: "ImageFace";
id: string;
rectangle: myFaces_myFaceGroups_imageFaces_rectangle | null;
media: myFaces_myFaceGroups_imageFaces_media;
}
export interface myFaces_myFaceGroups {
__typename: "FaceGroup";
id: string;
label: string | null;
imageFaceCount: number;
imageFaces: myFaces_myFaceGroups_imageFaces[];
}
export interface myFaces {
myFaceGroups: myFaces_myFaceGroups[];
}
export interface myFacesVariables {
limit?: number | null;
offset?: number | null;
}

View File

@ -0,0 +1,20 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: recognizeUnlabeledFaces
// ====================================================
export interface recognizeUnlabeledFaces_recognizeUnlabeledFaces {
__typename: "ImageFace";
id: string;
}
export interface recognizeUnlabeledFaces {
/**
* Check all unlabeled faces to see if they match a labeled FaceGroup, and move them if they match
*/
recognizeUnlabeledFaces: recognizeUnlabeledFaces_recognizeUnlabeledFaces[];
}

View File

@ -0,0 +1,26 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: setGroupLabel
// ====================================================
export interface setGroupLabel_setFaceGroupLabel {
__typename: "FaceGroup";
id: string;
label: string | null;
}
export interface setGroupLabel {
/**
* Assign a label to a face group, set label to null to remove the current one
*/
setFaceGroupLabel: setGroupLabel_setFaceGroupLabel;
}
export interface setGroupLabelVariables {
groupID: string;
label?: string | null;
}

View File

@ -0,0 +1,19 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL query operation: placePageMapboxToken
// ====================================================
export interface placePageMapboxToken {
/**
* Get the mapbox api token, returns null if mapbox is not enabled
*/
mapboxToken: string | null;
/**
* Get media owned by the logged in user, returned in GeoJson format
*/
myMediaGeoJson: any;
}

View File

@ -0,0 +1,88 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
import { MediaType } from "./../../../../__generated__/globalTypes";
// ====================================================
// GraphQL query operation: placePageQueryMedia
// ====================================================
export interface placePageQueryMedia_mediaList_thumbnail {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
/**
* Width of the image in pixels
*/
width: number;
/**
* Height of the image in pixels
*/
height: number;
}
export interface placePageQueryMedia_mediaList_highRes {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
/**
* Width of the image in pixels
*/
width: number;
/**
* Height of the image in pixels
*/
height: number;
}
export interface placePageQueryMedia_mediaList_videoWeb {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
/**
* Width of the image in pixels
*/
width: number;
/**
* Height of the image in pixels
*/
height: number;
}
export interface placePageQueryMedia_mediaList {
__typename: "Media";
id: string;
title: string;
/**
* URL to display the media in a smaller resolution
*/
thumbnail: placePageQueryMedia_mediaList_thumbnail | null;
/**
* URL to display the photo in full resolution, will be null for videos
*/
highRes: placePageQueryMedia_mediaList_highRes | null;
/**
* URL to get the video in a web format that can be played in the browser, will be null for photos
*/
videoWeb: placePageQueryMedia_mediaList_videoWeb | null;
type: MediaType;
}
export interface placePageQueryMedia {
/**
* Get a list of media by their ids, user must own the media or be admin
*/
mediaList: placePageQueryMedia_mediaList[];
}
export interface placePageQueryMediaVariables {
mediaIDs: string[];
}

View File

@ -13,7 +13,7 @@ const languagePreferences = [
] ]
const CHANGE_USER_PREFERENCES = gql` const CHANGE_USER_PREFERENCES = gql`
mutation($language: String) { mutation changeUserPreferences($language: String) {
changeUserPreferences(language: $language) { changeUserPreferences(language: $language) {
id id
language language
@ -22,7 +22,7 @@ const CHANGE_USER_PREFERENCES = gql`
` `
const MY_USER_PREFERENCES = gql` const MY_USER_PREFERENCES = gql`
query { query myUserPreferences {
myUserPreferences { myUserPreferences {
id id
language language

View File

@ -15,7 +15,7 @@ const createUserMutation = gql`
} }
` `
const addRootPathMutation = gql` export const userAddRootPathMutation = gql`
mutation userAddRootPath($id: ID!, $rootPath: String!) { mutation userAddRootPath($id: ID!, $rootPath: String!) {
userAddRootPath(id: $id, rootPath: $rootPath) { userAddRootPath(id: $id, rootPath: $rootPath) {
id id
@ -35,7 +35,7 @@ const AddUserRow = ({ setShow, show, onUserAdded }) => {
const [state, setState] = useState(initialState) const [state, setState] = useState(initialState)
const [addRootPath, { loading: addRootPathLoading }] = useMutation( const [addRootPath, { loading: addRootPathLoading }] = useMutation(
addRootPathMutation, userAddRootPathMutation,
{ {
onCompleted: () => { onCompleted: () => {
setState(initialState) setState(initialState)

View File

@ -5,14 +5,7 @@ import { Button, Icon, Input } from 'semantic-ui-react'
import styled from 'styled-components' import styled from 'styled-components'
import { USERS_QUERY } from './UsersTable' import { USERS_QUERY } from './UsersTable'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { userAddRootPathMutation } from './AddUserRow'
const userAddRootPathMutation = gql`
mutation userAddRootPath($id: ID!, $rootPath: String!) {
userAddRootPath(id: $id, rootPath: $rootPath) {
id
}
}
`
const userRemoveAlbumPathMutation = gql` const userRemoveAlbumPathMutation = gql`
mutation userRemoveAlbumPathMutation($userId: ID!, $albumId: ID!) { mutation userRemoveAlbumPathMutation($userId: ID!, $albumId: ID!) {

View File

@ -0,0 +1,22 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: changeUserPassword
// ====================================================
export interface changeUserPassword_updateUser {
__typename: "User";
id: string;
}
export interface changeUserPassword {
updateUser: changeUserPassword_updateUser | null;
}
export interface changeUserPasswordVariables {
userId: string;
password: string;
}

View File

@ -0,0 +1,24 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: createUser
// ====================================================
export interface createUser_createUser {
__typename: "User";
id: string;
username: string;
admin: boolean;
}
export interface createUser {
createUser: createUser_createUser | null;
}
export interface createUserVariables {
username: string;
admin: boolean;
}

View File

@ -0,0 +1,22 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: deleteUser
// ====================================================
export interface deleteUser_deleteUser {
__typename: "User";
id: string;
username: string;
}
export interface deleteUser {
deleteUser: deleteUser_deleteUser | null;
}
export interface deleteUserVariables {
id: string;
}

View File

@ -0,0 +1,24 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: scanUser
// ====================================================
export interface scanUser_scanUser {
__typename: "ScannerResult";
success: boolean;
}
export interface scanUser {
/**
* Scan a single user for new media
*/
scanUser: scanUser_scanUser;
}
export interface scanUserVariables {
userId: string;
}

View File

@ -0,0 +1,35 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL query operation: settingsUsersQuery
// ====================================================
export interface settingsUsersQuery_user_rootAlbums {
__typename: "Album";
id: string;
/**
* The path on the filesystem of the server, where this album is located
*/
filePath: string;
}
export interface settingsUsersQuery_user {
__typename: "User";
id: string;
username: string;
admin: boolean;
/**
* Top level albums owned by this user
*/
rootAlbums: settingsUsersQuery_user_rootAlbums[];
}
export interface settingsUsersQuery {
/**
* List of registered users, must be admin to call
*/
user: settingsUsersQuery_user[];
}

View File

@ -0,0 +1,25 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: updateUser
// ====================================================
export interface updateUser_updateUser {
__typename: "User";
id: string;
username: string;
admin: boolean;
}
export interface updateUser {
updateUser: updateUser_updateUser | null;
}
export interface updateUserVariables {
id: string;
username?: string | null;
admin?: boolean | null;
}

View File

@ -0,0 +1,25 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: userAddRootPath
// ====================================================
export interface userAddRootPath_userAddRootPath {
__typename: "Album";
id: string;
}
export interface userAddRootPath {
/**
* Add a root path from where to look for media for the given user
*/
userAddRootPath: userAddRootPath_userAddRootPath | null;
}
export interface userAddRootPathVariables {
id: string;
rootPath: string;
}

View File

@ -0,0 +1,22 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: userRemoveAlbumPathMutation
// ====================================================
export interface userRemoveAlbumPathMutation_userRemoveRootAlbum {
__typename: "Album";
id: string;
}
export interface userRemoveAlbumPathMutation {
userRemoveRootAlbum: userRemoveAlbumPathMutation_userRemoveRootAlbum | null;
}
export interface userRemoveAlbumPathMutationVariables {
userId: string;
albumId: string;
}

View File

@ -0,0 +1,20 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: changeScanIntervalMutation
// ====================================================
export interface changeScanIntervalMutation {
/**
* Set how often, in seconds, the server should automatically scan for new media,
* a value of 0 will disable periodic scans
*/
setPeriodicScanInterval: number;
}
export interface changeScanIntervalMutationVariables {
interval: number;
}

View File

@ -0,0 +1,24 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
import { LanguageTranslation } from "./../../../../__generated__/globalTypes";
// ====================================================
// GraphQL mutation operation: changeUserPreferences
// ====================================================
export interface changeUserPreferences_changeUserPreferences {
__typename: "UserPreferences";
id: string;
language: LanguageTranslation | null;
}
export interface changeUserPreferences {
changeUserPreferences: changeUserPreferences_changeUserPreferences;
}
export interface changeUserPreferencesVariables {
language?: string | null;
}

View File

@ -0,0 +1,20 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL query operation: concurrentWorkersQuery
// ====================================================
export interface concurrentWorkersQuery_siteInfo {
__typename: "SiteInfo";
/**
* How many max concurrent scanner jobs that should run at once
*/
concurrentWorkers: number;
}
export interface concurrentWorkersQuery {
siteInfo: concurrentWorkersQuery_siteInfo;
}

View File

@ -0,0 +1,20 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
import { LanguageTranslation } from "./../../../../__generated__/globalTypes";
// ====================================================
// GraphQL query operation: myUserPreferences
// ====================================================
export interface myUserPreferences_myUserPreferences {
__typename: "UserPreferences";
id: string;
language: LanguageTranslation | null;
}
export interface myUserPreferences {
myUserPreferences: myUserPreferences_myUserPreferences;
}

View File

@ -0,0 +1,21 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: scanAllMutation
// ====================================================
export interface scanAllMutation_scanAll {
__typename: "ScannerResult";
success: boolean;
message: string | null;
}
export interface scanAllMutation {
/**
* Scan all users for new media
*/
scanAll: scanAllMutation_scanAll;
}

View File

@ -0,0 +1,20 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL query operation: scanIntervalQuery
// ====================================================
export interface scanIntervalQuery_siteInfo {
__typename: "SiteInfo";
/**
* How often automatic scans should be initiated in seconds
*/
periodicScanInterval: number;
}
export interface scanIntervalQuery {
siteInfo: scanIntervalQuery_siteInfo;
}

View File

@ -0,0 +1,19 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: setConcurrentWorkers
// ====================================================
export interface setConcurrentWorkers {
/**
* Set max number of concurrent scanner jobs running at once
*/
setScannerConcurrentWorkers: number;
}
export interface setConcurrentWorkersVariables {
workers: number;
}

View File

@ -0,0 +1,165 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
import { MediaType } from "./../../../../__generated__/globalTypes";
// ====================================================
// GraphQL query operation: SharePageToken
// ====================================================
export interface SharePageToken_shareToken_album {
__typename: "Album";
id: string;
}
export interface SharePageToken_shareToken_media_thumbnail {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
/**
* Width of the image in pixels
*/
width: number;
/**
* Height of the image in pixels
*/
height: number;
}
export interface SharePageToken_shareToken_media_downloads_mediaUrl {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
/**
* Width of the image in pixels
*/
width: number;
/**
* Height of the image in pixels
*/
height: number;
/**
* The file size of the resource in bytes
*/
fileSize: number;
}
export interface SharePageToken_shareToken_media_downloads {
__typename: "MediaDownload";
title: string;
mediaUrl: SharePageToken_shareToken_media_downloads_mediaUrl;
}
export interface SharePageToken_shareToken_media_highRes {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
/**
* Width of the image in pixels
*/
width: number;
/**
* Height of the image in pixels
*/
height: number;
}
export interface SharePageToken_shareToken_media_videoWeb {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
}
export interface SharePageToken_shareToken_media_exif {
__typename: "MediaEXIF";
/**
* The model name of the camera
*/
camera: string | null;
/**
* The maker of the camera
*/
maker: string | null;
/**
* The name of the lens
*/
lens: string | null;
dateShot: any | null;
/**
* The exposure time of the image
*/
exposure: number | null;
/**
* The aperature stops of the image
*/
aperture: number | null;
/**
* The ISO setting of the image
*/
iso: number | null;
/**
* The focal length of the lens, when the image was taken
*/
focalLength: number | null;
/**
* A formatted description of the flash settings, when the image was taken
*/
flash: number | null;
/**
* An index describing the mode for adjusting the exposure of the image
*/
exposureProgram: number | null;
}
export interface SharePageToken_shareToken_media {
__typename: "Media";
id: string;
title: string;
type: MediaType;
/**
* URL to display the media in a smaller resolution
*/
thumbnail: SharePageToken_shareToken_media_thumbnail | null;
downloads: SharePageToken_shareToken_media_downloads[];
/**
* URL to display the photo in full resolution, will be null for videos
*/
highRes: SharePageToken_shareToken_media_highRes | null;
/**
* URL to get the video in a web format that can be played in the browser, will be null for photos
*/
videoWeb: SharePageToken_shareToken_media_videoWeb | null;
exif: SharePageToken_shareToken_media_exif | null;
}
export interface SharePageToken_shareToken {
__typename: "ShareToken";
token: string;
/**
* The album this token shares
*/
album: SharePageToken_shareToken_album | null;
/**
* The media this token shares
*/
media: SharePageToken_shareToken_media | null;
}
export interface SharePageToken {
shareToken: SharePageToken_shareToken;
}
export interface SharePageTokenVariables {
token: string;
password?: string | null;
}

View File

@ -0,0 +1,17 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL query operation: ShareTokenValidatePassword
// ====================================================
export interface ShareTokenValidatePassword {
shareTokenValidatePassword: boolean;
}
export interface ShareTokenValidatePasswordVariables {
token: string;
password?: string | null;
}

View File

@ -0,0 +1,194 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
import { MediaType } from "./../../../../__generated__/globalTypes";
// ====================================================
// GraphQL query operation: shareAlbumQuery
// ====================================================
export interface shareAlbumQuery_album_subAlbums_thumbnail_thumbnail {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
}
export interface shareAlbumQuery_album_subAlbums_thumbnail {
__typename: "Media";
/**
* URL to display the media in a smaller resolution
*/
thumbnail: shareAlbumQuery_album_subAlbums_thumbnail_thumbnail | null;
}
export interface shareAlbumQuery_album_subAlbums {
__typename: "Album";
id: string;
title: string;
/**
* An image in this album used for previewing this album
*/
thumbnail: shareAlbumQuery_album_subAlbums_thumbnail | null;
}
export interface shareAlbumQuery_album_media_thumbnail {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
/**
* Width of the image in pixels
*/
width: number;
/**
* Height of the image in pixels
*/
height: number;
}
export interface shareAlbumQuery_album_media_downloads_mediaUrl {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
/**
* Width of the image in pixels
*/
width: number;
/**
* Height of the image in pixels
*/
height: number;
/**
* The file size of the resource in bytes
*/
fileSize: number;
}
export interface shareAlbumQuery_album_media_downloads {
__typename: "MediaDownload";
title: string;
mediaUrl: shareAlbumQuery_album_media_downloads_mediaUrl;
}
export interface shareAlbumQuery_album_media_highRes {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
/**
* Width of the image in pixels
*/
width: number;
/**
* Height of the image in pixels
*/
height: number;
}
export interface shareAlbumQuery_album_media_videoWeb {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
}
export interface shareAlbumQuery_album_media_exif {
__typename: "MediaEXIF";
/**
* The model name of the camera
*/
camera: string | null;
/**
* The maker of the camera
*/
maker: string | null;
/**
* The name of the lens
*/
lens: string | null;
dateShot: any | null;
/**
* The exposure time of the image
*/
exposure: number | null;
/**
* The aperature stops of the image
*/
aperture: number | null;
/**
* The ISO setting of the image
*/
iso: number | null;
/**
* The focal length of the lens, when the image was taken
*/
focalLength: number | null;
/**
* A formatted description of the flash settings, when the image was taken
*/
flash: number | null;
/**
* An index describing the mode for adjusting the exposure of the image
*/
exposureProgram: number | null;
}
export interface shareAlbumQuery_album_media {
__typename: "Media";
id: string;
title: string;
type: MediaType;
/**
* URL to display the media in a smaller resolution
*/
thumbnail: shareAlbumQuery_album_media_thumbnail | null;
downloads: shareAlbumQuery_album_media_downloads[];
/**
* URL to display the photo in full resolution, will be null for videos
*/
highRes: shareAlbumQuery_album_media_highRes | null;
/**
* URL to get the video in a web format that can be played in the browser, will be null for photos
*/
videoWeb: shareAlbumQuery_album_media_videoWeb | null;
exif: shareAlbumQuery_album_media_exif | null;
}
export interface shareAlbumQuery_album {
__typename: "Album";
id: string;
title: string;
/**
* The albums contained in this album
*/
subAlbums: shareAlbumQuery_album_subAlbums[];
/**
* The media inside this album
*/
media: shareAlbumQuery_album_media[];
}
export interface shareAlbumQuery {
/**
* Get album by id, user must own the album or be admin
* If valid tokenCredentials are provided, the album may be retrived without further authentication
*/
album: shareAlbumQuery_album;
}
export interface shareAlbumQueryVariables {
id: string;
token: string;
password?: string | null;
limit?: number | null;
offset?: number | null;
}

20
ui/src/__generated__/adminQuery.ts generated Normal file
View File

@ -0,0 +1,20 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL query operation: adminQuery
// ====================================================
export interface adminQuery_myUser {
__typename: "User";
admin: boolean;
}
export interface adminQuery {
/**
* Information about the currently logged in user
*/
myUser: adminQuery_myUser;
}

View File

@ -0,0 +1,15 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL query operation: mapboxEnabledQuery
// ====================================================
export interface mapboxEnabledQuery {
/**
* Get the mapbox api token, returns null if mapbox is not enabled
*/
mapboxToken: string | null;
}

20
ui/src/__generated__/siteTranslation.ts generated Normal file
View File

@ -0,0 +1,20 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
import { LanguageTranslation } from "./../../__generated__/globalTypes";
// ====================================================
// GraphQL query operation: siteTranslation
// ====================================================
export interface siteTranslation_myUserPreferences {
__typename: "UserPreferences";
id: string;
language: LanguageTranslation | null;
}
export interface siteTranslation {
myUserPreferences: siteTranslation_myUserPreferences;
}

View File

@ -0,0 +1,32 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL query operation: albumPathQuery
// ====================================================
export interface albumPathQuery_album_path {
__typename: "Album";
id: string;
title: string;
}
export interface albumPathQuery_album {
__typename: "Album";
id: string;
path: albumPathQuery_album_path[];
}
export interface albumPathQuery {
/**
* Get album by id, user must own the album or be admin
* If valid tokenCredentials are provided, the album may be retrived without further authentication
*/
album: albumPathQuery_album;
}
export interface albumPathQueryVariables {
id: string;
}

View File

@ -0,0 +1,76 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL query operation: searchQuery
// ====================================================
export interface searchQuery_search_albums_thumbnail_thumbnail {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
}
export interface searchQuery_search_albums_thumbnail {
__typename: "Media";
/**
* URL to display the media in a smaller resolution
*/
thumbnail: searchQuery_search_albums_thumbnail_thumbnail | null;
}
export interface searchQuery_search_albums {
__typename: "Album";
id: string;
title: string;
/**
* An image in this album used for previewing this album
*/
thumbnail: searchQuery_search_albums_thumbnail | null;
}
export interface searchQuery_search_media_thumbnail {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
}
export interface searchQuery_search_media_album {
__typename: "Album";
id: string;
}
export interface searchQuery_search_media {
__typename: "Media";
id: string;
title: string;
/**
* URL to display the media in a smaller resolution
*/
thumbnail: searchQuery_search_media_thumbnail | null;
/**
* The album that holds the media
*/
album: searchQuery_search_media_album;
}
export interface searchQuery_search {
__typename: "SearchResult";
query: string;
albums: searchQuery_search_albums[];
media: searchQuery_search_media[];
}
export interface searchQuery {
search: searchQuery_search;
}
export interface searchQueryVariables {
query: string;
}

View File

@ -0,0 +1,29 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
import { NotificationType } from "./../../../../__generated__/globalTypes";
// ====================================================
// GraphQL subscription operation: notificationSubscription
// ====================================================
export interface notificationSubscription_notification {
__typename: "Notification";
key: string;
type: NotificationType;
header: string;
content: string;
progress: number | null;
positive: boolean;
negative: boolean;
/**
* Time in milliseconds before the notification will close
*/
timeout: number | null;
}
export interface notificationSubscription {
notification: notificationSubscription_notification;
}

View File

@ -0,0 +1,26 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: markMediaFavorite
// ====================================================
export interface markMediaFavorite_favoriteMedia {
__typename: "Media";
id: string;
favorite: boolean;
}
export interface markMediaFavorite {
/**
* Mark or unmark a media as being a favorite
*/
favoriteMedia: markMediaFavorite_favoriteMedia | null;
}
export interface markMediaFavoriteVariables {
mediaId: string;
favorite: boolean;
}

View File

@ -1,16 +1,9 @@
import React, { useEffect } from 'react' import React, { useEffect } from 'react'
import PropTypes from 'prop-types' import PropTypes from 'prop-types'
import { Route, Redirect } from 'react-router-dom' import { Route, Redirect } from 'react-router-dom'
import { gql, useLazyQuery } from '@apollo/client' import { useLazyQuery } from '@apollo/client'
import { authToken } from '../../helpers/authentication' import { authToken } from '../../helpers/authentication'
import { ADMIN_QUERY } from '../../Layout'
export const ADMIN_QUERY = gql`
query adminQuery {
myUser {
admin
}
}
`
export const useIsAdmin = (enabled = true) => { export const useIsAdmin = (enabled = true) => {
const [fetchAdminQuery, { data }] = useLazyQuery(ADMIN_QUERY) const [fetchAdminQuery, { data }] = useLazyQuery(ADMIN_QUERY)

View File

@ -0,0 +1,26 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL query operation: getAlbumSidebar
// ====================================================
export interface getAlbumSidebar_album {
__typename: "Album";
id: string;
title: string;
}
export interface getAlbumSidebar {
/**
* Get album by id, user must own the album or be admin
* If valid tokenCredentials are provided, the album may be retrived without further authentication
*/
album: getAlbumSidebar_album;
}
export interface getAlbumSidebarVariables {
id: string;
}

View File

@ -0,0 +1,36 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL query operation: sidbarGetAlbumShares
// ====================================================
export interface sidbarGetAlbumShares_album_shares {
__typename: "ShareToken";
id: string;
token: string;
/**
* Whether or not a password is needed to access the share
*/
hasPassword: boolean;
}
export interface sidbarGetAlbumShares_album {
__typename: "Album";
id: string;
shares: (sidbarGetAlbumShares_album_shares | null)[] | null;
}
export interface sidbarGetAlbumShares {
/**
* Get album by id, user must own the album or be admin
* If valid tokenCredentials are provided, the album may be retrived without further authentication
*/
album: sidbarGetAlbumShares_album;
}
export interface sidbarGetAlbumSharesVariables {
id: string;
}

View File

@ -0,0 +1,36 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL query operation: sidbarGetPhotoShares
// ====================================================
export interface sidbarGetPhotoShares_media_shares {
__typename: "ShareToken";
id: string;
token: string;
/**
* Whether or not a password is needed to access the share
*/
hasPassword: boolean;
}
export interface sidbarGetPhotoShares_media {
__typename: "Media";
id: string;
shares: sidbarGetPhotoShares_media_shares[];
}
export interface sidbarGetPhotoShares {
/**
* Get media by id, user must own the media or be admin.
* If valid tokenCredentials are provided, the media may be retrived without further authentication
*/
media: sidbarGetPhotoShares_media;
}
export interface sidbarGetPhotoSharesVariables {
id: string;
}

View File

@ -0,0 +1,26 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: sidebarAlbumAddShare
// ====================================================
export interface sidebarAlbumAddShare_shareAlbum {
__typename: "ShareToken";
token: string;
}
export interface sidebarAlbumAddShare {
/**
* Generate share token for album
*/
shareAlbum: sidebarAlbumAddShare_shareAlbum | null;
}
export interface sidebarAlbumAddShareVariables {
id: string;
password?: string | null;
expire?: any | null;
}

View File

@ -0,0 +1,52 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL query operation: sidebarDownloadQuery
// ====================================================
export interface sidebarDownloadQuery_media_downloads_mediaUrl {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
/**
* Width of the image in pixels
*/
width: number;
/**
* Height of the image in pixels
*/
height: number;
/**
* The file size of the resource in bytes
*/
fileSize: number;
}
export interface sidebarDownloadQuery_media_downloads {
__typename: "MediaDownload";
title: string;
mediaUrl: sidebarDownloadQuery_media_downloads_mediaUrl;
}
export interface sidebarDownloadQuery_media {
__typename: "Media";
id: string;
downloads: sidebarDownloadQuery_media_downloads[];
}
export interface sidebarDownloadQuery {
/**
* Get media by id, user must own the media or be admin.
* If valid tokenCredentials are provided, the media may be retrived without further authentication
*/
media: sidebarDownloadQuery_media;
}
export interface sidebarDownloadQueryVariables {
mediaId: string;
}

View File

@ -0,0 +1,167 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
import { MediaType } from "./../../../../__generated__/globalTypes";
// ====================================================
// GraphQL query operation: sidebarPhoto
// ====================================================
export interface sidebarPhoto_media_highRes {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
/**
* Width of the image in pixels
*/
width: number;
/**
* Height of the image in pixels
*/
height: number;
}
export interface sidebarPhoto_media_thumbnail {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
/**
* Width of the image in pixels
*/
width: number;
/**
* Height of the image in pixels
*/
height: number;
}
export interface sidebarPhoto_media_videoWeb {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
/**
* Width of the image in pixels
*/
width: number;
/**
* Height of the image in pixels
*/
height: number;
}
export interface sidebarPhoto_media_videoMetadata {
__typename: "VideoMetadata";
id: string;
width: number;
height: number;
duration: number;
codec: string | null;
framerate: number | null;
bitrate: string | null;
colorProfile: string | null;
audio: string | null;
}
export interface sidebarPhoto_media_exif {
__typename: "MediaEXIF";
id: string;
/**
* The model name of the camera
*/
camera: string | null;
/**
* The maker of the camera
*/
maker: string | null;
/**
* The name of the lens
*/
lens: string | null;
dateShot: any | null;
/**
* The exposure time of the image
*/
exposure: number | null;
/**
* The aperature stops of the image
*/
aperture: number | null;
/**
* The ISO setting of the image
*/
iso: number | null;
/**
* The focal length of the lens, when the image was taken
*/
focalLength: number | null;
/**
* A formatted description of the flash settings, when the image was taken
*/
flash: number | null;
/**
* An index describing the mode for adjusting the exposure of the image
*/
exposureProgram: number | null;
}
export interface sidebarPhoto_media_faces_rectangle {
__typename: "FaceRectangle";
minX: number;
maxX: number;
minY: number;
maxY: number;
}
export interface sidebarPhoto_media_faces_faceGroup {
__typename: "FaceGroup";
id: string;
}
export interface sidebarPhoto_media_faces {
__typename: "ImageFace";
id: string;
rectangle: sidebarPhoto_media_faces_rectangle | null;
faceGroup: sidebarPhoto_media_faces_faceGroup;
}
export interface sidebarPhoto_media {
__typename: "Media";
id: string;
title: string;
type: MediaType;
/**
* URL to display the photo in full resolution, will be null for videos
*/
highRes: sidebarPhoto_media_highRes | null;
/**
* URL to display the media in a smaller resolution
*/
thumbnail: sidebarPhoto_media_thumbnail | null;
/**
* URL to get the video in a web format that can be played in the browser, will be null for photos
*/
videoWeb: sidebarPhoto_media_videoWeb | null;
videoMetadata: sidebarPhoto_media_videoMetadata | null;
exif: sidebarPhoto_media_exif | null;
faces: sidebarPhoto_media_faces[];
}
export interface sidebarPhoto {
/**
* Get media by id, user must own the media or be admin.
* If valid tokenCredentials are provided, the media may be retrived without further authentication
*/
media: sidebarPhoto_media;
}
export interface sidebarPhotoVariables {
id: string;
}

View File

@ -0,0 +1,26 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: sidebarPhotoAddShare
// ====================================================
export interface sidebarPhotoAddShare_shareMedia {
__typename: "ShareToken";
token: string;
}
export interface sidebarPhotoAddShare {
/**
* Generate share token for media
*/
shareMedia: sidebarPhotoAddShare_shareMedia | null;
}
export interface sidebarPhotoAddShareVariables {
id: string;
password?: string | null;
expire?: any | null;
}

View File

@ -0,0 +1,29 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: sidebarProtectShare
// ====================================================
export interface sidebarProtectShare_protectShareToken {
__typename: "ShareToken";
token: string;
/**
* Whether or not a password is needed to access the share
*/
hasPassword: boolean;
}
export interface sidebarProtectShare {
/**
* Set a password for a token, if null is passed for the password argument, the password will be cleared
*/
protectShareToken: sidebarProtectShare_protectShareToken | null;
}
export interface sidebarProtectShareVariables {
token: string;
password?: string | null;
}

View File

@ -0,0 +1,24 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
// ====================================================
// GraphQL mutation operation: sidebareDeleteShare
// ====================================================
export interface sidebareDeleteShare_deleteShareToken {
__typename: "ShareToken";
token: string;
}
export interface sidebareDeleteShare {
/**
* Delete a share token by it's token value
*/
deleteShareToken: sidebareDeleteShare_deleteShareToken | null;
}
export interface sidebareDeleteShareVariables {
token: string;
}

View File

@ -0,0 +1,94 @@
/* tslint:disable */
/* eslint-disable */
// @generated
// This file was automatically generated and should not be edited.
import { MediaType } from "./../../../../__generated__/globalTypes";
// ====================================================
// GraphQL query operation: myTimeline
// ====================================================
export interface myTimeline_myTimeline_album {
__typename: "Album";
id: string;
title: string;
}
export interface myTimeline_myTimeline_media_thumbnail {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
/**
* Width of the image in pixels
*/
width: number;
/**
* Height of the image in pixels
*/
height: number;
}
export interface myTimeline_myTimeline_media_highRes {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
/**
* Width of the image in pixels
*/
width: number;
/**
* Height of the image in pixels
*/
height: number;
}
export interface myTimeline_myTimeline_media_videoWeb {
__typename: "MediaURL";
/**
* URL for previewing the image
*/
url: string;
}
export interface myTimeline_myTimeline_media {
__typename: "Media";
id: string;
title: string;
type: MediaType;
/**
* URL to display the media in a smaller resolution
*/
thumbnail: myTimeline_myTimeline_media_thumbnail | null;
/**
* URL to display the photo in full resolution, will be null for videos
*/
highRes: myTimeline_myTimeline_media_highRes | null;
/**
* URL to get the video in a web format that can be played in the browser, will be null for photos
*/
videoWeb: myTimeline_myTimeline_media_videoWeb | null;
favorite: boolean;
}
export interface myTimeline_myTimeline {
__typename: "TimelineGroup";
album: myTimeline_myTimeline_album;
media: myTimeline_myTimeline_media[];
mediaTotal: number;
date: any;
}
export interface myTimeline {
myTimeline: myTimeline_myTimeline[];
}
export interface myTimelineVariables {
onlyFavorites?: boolean | null;
limit?: number | null;
offset?: number | null;
}

72
ui/tsconfig.json Normal file
View File

@ -0,0 +1,72 @@
{
"compilerOptions": {
/* Visit https://aka.ms/tsconfig.json to read more about this file */
/* Basic Options */
// "incremental": true, /* Enable incremental compilation */
// "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
// "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
// "lib": [], /* Specify library files to be included in the compilation. */
"allowJs": true /* Allow javascript files to be compiled. */,
// "checkJs": true, /* Report errors in .js files. */
"jsx": "preserve" /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */,
"resolveJsonModule": true,
// "declaration": true, /* Generates corresponding '.d.ts' file. */
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
// "sourceMap": true, /* Generates corresponding '.map' file. */
// "outFile": "./", /* Concatenate and emit output to single file. */
// "outDir": "./", /* Redirect output structure to the directory. */
// "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
// "composite": true, /* Enable project compilation */
// "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
// "removeComments": true, /* Do not emit comments to output. */
"noEmit": true /* Do not emit outputs. */,
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
// "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
/* Strict Type-Checking Options */
"strict": true /* Enable all strict type-checking options. */,
"noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */,
"strictNullChecks": true /* Enable strict null checks. */,
"strictFunctionTypes": true /* Enable strict checking of function types. */,
"strictBindCallApply": true /* Enable strict 'bind', 'call', and 'apply' methods on functions. */,
"strictPropertyInitialization": true /* Enable strict checking of property initialization in classes. */,
"noImplicitThis": true /* Raise error on 'this' expressions with an implied 'any' type. */,
"alwaysStrict": true /* Parse in strict mode and emit "use strict" for each source file. */,
/* Additional Checks */
// "noUnusedLocals": true, /* Report errors on unused locals. */
// "noUnusedParameters": true, /* Report errors on unused parameters. */
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
// "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
// "noPropertyAccessFromIndexSignature": true, /* Require undeclared properties from index signatures to use element accesses. */
/* Module Resolution Options */
// "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
// "typeRoots": [], /* List of folders to include type definitions from. */
// "types": [], /* Type declaration files to be included in compilation. */
// "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */,
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
/* Source Map Options */
// "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
/* Experimental Options */
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
/* Advanced Options */
"skipLibCheck": true /* Skip type checking of declaration files. */,
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
}
}