* Add licenses

* Upgrade deps

* Update deprecated

* Upgrade deps
This commit is contained in:
Sung Won Cho 2019-10-28 18:36:24 -07:00 committed by GitHub
commit bdb75fd16c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
124 changed files with 1486 additions and 1489 deletions

View file

@ -121,7 +121,7 @@ endif
.PHONY: build-cli
## release
release-cli: build-cli
release-cli: clean build-cli
ifndef version
$(error version is required. Usage: make version=0.1.0 release-cli)
endif
@ -145,7 +145,7 @@ endif
)
.PHONY: release-cli
release-server: build-server
release-server: clean build-server
ifndef version
$(error version is required. Usage: make version=0.1.0 release-server)
endif

File diff suppressed because it is too large Load diff

View file

@ -17,36 +17,36 @@
"classnames": "^2.2.5",
"lodash": "^4.17.15",
"qs": "^6.9.0",
"react": "^16.9.0",
"react-dom": "^16.9.0",
"react": "^16.11.0",
"react-dom": "^16.11.0",
"react-redux": "^7.0.0",
"react-select": "^3.0.0",
"react-select": "^3.0.8",
"redux": "^4.0.4",
"redux-logger": "^3.0.6",
"redux-thunk": "^2.2.0"
},
"devDependencies": {
"@types/react": "^16.9.3",
"@types/react-dom": "^16.9.1",
"@typescript-eslint/eslint-plugin": "^2.3.1",
"@typescript-eslint/parser": "^2.3.1",
"concurrently": "^4.1.2",
"@types/react": "^16.9.11",
"@types/react-dom": "^16.9.3",
"@typescript-eslint/eslint-plugin": "^2.6.0",
"@typescript-eslint/parser": "^2.6.0",
"concurrently": "^5.0.0",
"del": "^5.0.0",
"eslint-config-airbnb": "^18.0.1",
"eslint-plugin-import": "^2.18.2",
"eslint-plugin-jsx-a11y": "^6.2.3",
"eslint-plugin-react": "^7.14.3",
"eslint-plugin-react-hooks": "^2.0.1",
"eslint-plugin-react": "^7.16.0",
"eslint-plugin-react-hooks": "^2.2.0",
"gulp": "^4.0.0",
"gulp-if": "^3.0.0",
"gulp-imagemin": "^6.0.0",
"gulp-imagemin": "^6.1.1",
"gulp-livereload": "^4.0.2",
"gulp-replace": "^1.0.0",
"gulp-zip": "^5.0.0",
"gulp-zip": "^5.0.1",
"prettier": "^1.18.2",
"ts-loader": "^6.1.2",
"typescript": "^3.6.3",
"webpack": "^4.41.0",
"ts-loader": "^6.2.1",
"typescript": "^3.6.4",
"webpack": "^4.41.2",
"webpack-cli": "^3.3.9"
}
}

420
jslib/package-lock.json generated
View file

@ -92,9 +92,9 @@
"dev": true
},
"anymatch": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.0.tgz",
"integrity": "sha512-Ozz7l4ixzI7Oxj2+cw+p0tVUt27BpaJ+1+q1TCeANWxHpvyn2+Un+YamBdfKu0uh8xLodGhoa1v7595NhKDAuA==",
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
"integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
"dev": true,
"requires": {
"normalize-path": "^3.0.0",
@ -236,9 +236,9 @@
"dev": true
},
"bluebird": {
"version": "3.5.5",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz",
"integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==",
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz",
"integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==",
"dev": true
},
"bn.js": {
@ -522,19 +522,19 @@
"dev": true
},
"chokidar": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.1.1.tgz",
"integrity": "sha512-df4o16uZmMHzVQwECZRHwfguOt5ixpuQVaZHjYMvYisgKhE+JXwcj/Tcr3+3bu/XeOJQ9ycYmzu7Mv8XrGxJDQ==",
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.2.3.tgz",
"integrity": "sha512-GtrxGuRf6bzHQmXWRepvsGnXpkQkVU+D2/9a7dAe4a7v1NhrfZOZ2oKf76M3nOs46fFYL8D+Q8JYA4GYeJ8Cjw==",
"dev": true,
"requires": {
"anymatch": "^3.1.0",
"braces": "^3.0.2",
"fsevents": "^2.0.6",
"glob-parent": "^5.0.0",
"is-binary-path": "^2.1.0",
"is-glob": "^4.0.1",
"normalize-path": "^3.0.0",
"readdirp": "^3.1.1"
"anymatch": "~3.1.1",
"braces": "~3.0.2",
"fsevents": "~2.1.1",
"glob-parent": "~5.1.0",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.2.0"
}
},
"cipher-base": {
@ -548,14 +548,42 @@
}
},
"cliui": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
"integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
"integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
"dev": true,
"requires": {
"string-width": "^2.1.1",
"strip-ansi": "^4.0.0",
"wrap-ansi": "^2.0.0"
"string-width": "^3.1.0",
"strip-ansi": "^5.2.0",
"wrap-ansi": "^5.1.0"
},
"dependencies": {
"ansi-regex": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
},
"string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
"requires": {
"emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^5.1.0"
}
},
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"dev": true,
"requires": {
"ansi-regex": "^4.1.0"
}
}
}
},
"clone": {
@ -564,12 +592,6 @@
"integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
"dev": true
},
"code-point-at": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
"dev": true
},
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@ -721,12 +743,6 @@
"integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
"dev": true
},
"core-js": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
"integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
"dev": true
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
@ -770,19 +786,6 @@
"sha.js": "^2.4.8"
}
},
"cross-spawn": {
"version": "6.0.5",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
"integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"dev": true,
"requires": {
"nice-try": "^1.0.4",
"path-key": "^2.0.1",
"semver": "^5.5.0",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
}
},
"crypto-browserify": {
"version": "3.12.0",
"resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
@ -977,15 +980,6 @@
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
"dev": true
},
"end-of-stream": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.2.tgz",
"integrity": "sha512-gUSUszrsxlDnUbUwEI9Oygyrk4ZEWtVaHQc+uZHphVeNxl+qeqMV/jDWoTkjN1RmGlZ5QWAP7o458p/JMlikQg==",
"dev": true,
"requires": {
"once": "^1.4.0"
}
},
"engine.io": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz",
@ -1199,21 +1193,6 @@
"safe-buffer": "^5.1.1"
}
},
"execa": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
"integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
"dev": true,
"requires": {
"cross-spawn": "^6.0.0",
"get-stream": "^4.0.0",
"is-stream": "^1.1.0",
"npm-run-path": "^2.0.0",
"p-finally": "^1.0.0",
"signal-exit": "^3.0.0",
"strip-eof": "^1.0.0"
}
},
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
@ -1328,9 +1307,9 @@
"dev": true
},
"fsevents": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz",
"integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==",
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.1.tgz",
"integrity": "sha512-4FRPXWETxtigtJW/gxzEDsX1LVbPAM93VleB83kZB+ellqbHMkyt2aJfuzNLRvFPnGi6bcE5SvfxgbXPeKteJw==",
"dev": true,
"optional": true
},
@ -1358,15 +1337,6 @@
"integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
"dev": true
},
"get-stream": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
"integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
"dev": true,
"requires": {
"pump": "^3.0.0"
}
},
"glob": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
@ -1607,12 +1577,6 @@
}
}
},
"invert-kv": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
"integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
"dev": true
},
"is-arguments": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
@ -1635,9 +1599,9 @@
}
},
"is-buffer": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz",
"integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==",
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
"integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==",
"dev": true
},
"is-callable": {
@ -1730,12 +1694,6 @@
"has": "^1.0.1"
}
},
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
"dev": true
},
"is-symbol": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
@ -1879,9 +1837,9 @@
}
},
"karma": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/karma/-/karma-4.3.0.tgz",
"integrity": "sha512-NSPViHOt+RW38oJklvYxQC4BSQsv737oQlr/r06pCM+slDOr4myuI1ivkRmp+3dVpJDfZt2DmaPJ2wkx+ZZuMQ==",
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/karma/-/karma-4.4.1.tgz",
"integrity": "sha512-L5SIaXEYqzrh6b1wqYC42tNsFMx2PWuxky84pK9coK09MvmL7mxii3G3bZBh/0rvD27lqDd0le9jyhzvwif73A==",
"dev": true,
"requires": {
"bluebird": "^3.3.0",
@ -1890,7 +1848,6 @@
"chokidar": "^3.0.0",
"colors": "^1.1.0",
"connect": "^3.6.0",
"core-js": "^3.1.3",
"di": "^0.0.1",
"dom-serialize": "^2.2.0",
"flatted": "^2.0.0",
@ -2049,15 +2006,6 @@
}
}
},
"lcid": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
"integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
"dev": true,
"requires": {
"invert-kv": "^2.0.0"
}
},
"levn": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
@ -2163,15 +2111,6 @@
"yallist": "^2.1.2"
}
},
"map-age-cleaner": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
"integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
"dev": true,
"requires": {
"p-defer": "^1.0.0"
}
},
"map-obj": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
@ -2195,17 +2134,6 @@
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
"dev": true
},
"mem": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
"integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
"dev": true,
"requires": {
"map-age-cleaner": "^0.1.1",
"mimic-fn": "^2.0.0",
"p-is-promise": "^2.0.0"
}
},
"meow": {
"version": "3.7.0",
"resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
@ -2263,12 +2191,6 @@
"mime-db": "1.40.0"
}
},
"mimic-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
},
"minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
@ -2306,9 +2228,9 @@
}
},
"mocha": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.0.tgz",
"integrity": "sha512-qwfFgY+7EKAAUAdv7VYMZQknI7YJSGesxHyhn6qD52DV8UcSZs5XwCifcZGMVIE4a5fbmhvbotxC0DLQ0oKohQ==",
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.2.tgz",
"integrity": "sha512-FgDS9Re79yU1xz5d+C4rv1G7QagNGHZ+iXF81hO8zY35YZZcLEsJVfFolfsqKFWunATEvNzMK0r/CwWd/szO9A==",
"dev": true,
"requires": {
"ansi-colors": "3.2.3",
@ -2331,9 +2253,9 @@
"supports-color": "6.0.0",
"which": "1.3.1",
"wide-align": "1.1.3",
"yargs": "13.2.2",
"yargs-parser": "13.0.0",
"yargs-unparser": "1.5.0"
"yargs": "13.3.0",
"yargs-parser": "13.1.1",
"yargs-unparser": "1.6.0"
}
},
"ms": {
@ -2354,12 +2276,6 @@
"integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
"dev": true
},
"nice-try": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"dev": true
},
"node-environment-flags": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz",
@ -2408,15 +2324,6 @@
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true
},
"npm-run-path": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
"integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
"dev": true,
"requires": {
"path-key": "^2.0.0"
}
},
"number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
@ -2543,41 +2450,12 @@
"integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
"dev": true
},
"os-locale": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
"integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
"dev": true,
"requires": {
"execa": "^1.0.0",
"lcid": "^2.0.0",
"mem": "^4.0.0"
}
},
"os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
"dev": true
},
"p-defer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
"integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
"dev": true
},
"p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
"integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
"dev": true
},
"p-is-promise": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
"integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
"dev": true
},
"p-limit": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
@ -2682,12 +2560,6 @@
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
},
"path-key": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
"dev": true
},
"path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
@ -2818,16 +2690,6 @@
"safe-buffer": "^5.1.2"
}
},
"pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"dev": true,
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
},
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
@ -2948,9 +2810,9 @@
}
},
"readdirp": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.1.2.tgz",
"integrity": "sha512-8rhl0xs2cxfVsqzreYCvs8EwBfn/DhVdqtoLmw19uI3SC5avYX9teCurlErfpPXGmYtMHReGaP2RsLnFvz/lnw==",
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz",
"integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==",
"dev": true,
"requires": {
"picomatch": "^2.0.4"
@ -3093,21 +2955,6 @@
"safe-buffer": "^5.0.1"
}
},
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
"integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"dev": true,
"requires": {
"shebang-regex": "^1.0.0"
}
},
"shebang-regex": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
"dev": true
},
"signal-exit": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
@ -3398,12 +3245,6 @@
"is-utf8": "^0.2.0"
}
},
"strip-eof": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
"dev": true
},
"strip-indent": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
@ -3525,9 +3366,9 @@
}
},
"typescript": {
"version": "3.6.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.3.tgz",
"integrity": "sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw==",
"version": "3.6.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.4.tgz",
"integrity": "sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==",
"dev": true
},
"uglify-js": {
@ -3679,48 +3520,40 @@
"dev": true
},
"wrap-ansi": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
"integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
"integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
"dev": true,
"requires": {
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1"
"ansi-styles": "^3.2.0",
"string-width": "^3.0.0",
"strip-ansi": "^5.0.0"
},
"dependencies": {
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
},
"is-fullwidth-code-point": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"dev": true,
"requires": {
"number-is-nan": "^1.0.0"
}
},
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
"strip-ansi": "^3.0.0"
"emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^5.1.0"
}
},
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"dev": true,
"requires": {
"ansi-regex": "^2.0.0"
"ansi-regex": "^4.1.0"
}
}
}
@ -3775,22 +3608,21 @@
"dev": true
},
"yargs": {
"version": "13.2.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz",
"integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==",
"version": "13.3.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz",
"integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==",
"dev": true,
"requires": {
"cliui": "^4.0.0",
"cliui": "^5.0.0",
"find-up": "^3.0.0",
"get-caller-file": "^2.0.1",
"os-locale": "^3.1.0",
"require-directory": "^2.1.1",
"require-main-filename": "^2.0.0",
"set-blocking": "^2.0.0",
"string-width": "^3.0.0",
"which-module": "^2.0.0",
"y18n": "^4.0.0",
"yargs-parser": "^13.0.0"
"yargs-parser": "^13.1.1"
},
"dependencies": {
"ansi-regex": {
@ -3822,9 +3654,9 @@
}
},
"yargs-parser": {
"version": "13.0.0",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz",
"integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==",
"version": "13.1.1",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
"integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
"dev": true,
"requires": {
"camelcase": "^5.0.0",
@ -3832,58 +3664,14 @@
}
},
"yargs-unparser": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.5.0.tgz",
"integrity": "sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw==",
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz",
"integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==",
"dev": true,
"requires": {
"flat": "^4.1.0",
"lodash": "^4.17.11",
"yargs": "^12.0.5"
},
"dependencies": {
"get-caller-file": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
"integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
"dev": true
},
"require-main-filename": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
"integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
"dev": true
},
"yargs": {
"version": "12.0.5",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
"integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
"dev": true,
"requires": {
"cliui": "^4.0.0",
"decamelize": "^1.2.0",
"find-up": "^3.0.0",
"get-caller-file": "^1.0.1",
"os-locale": "^3.0.0",
"require-directory": "^2.1.1",
"require-main-filename": "^1.0.1",
"set-blocking": "^2.0.0",
"string-width": "^2.0.0",
"which-module": "^2.0.0",
"y18n": "^3.2.1 || ^4.0.0",
"yargs-parser": "^11.1.1"
}
},
"yargs-parser": {
"version": "11.1.1",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
"integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
"dev": true,
"requires": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
}
}
"lodash": "^4.17.15",
"yargs": "^13.3.0"
}
},
"yeast": {

View file

@ -21,13 +21,13 @@
"devDependencies": {
"@types/mocha": "^5.2.7",
"chai": "^4.2.0",
"karma": "^4.3.0",
"karma": "^4.4.1",
"karma-chrome-launcher": "^3.1.0",
"karma-mocha": "^1.3.0",
"karma-mocha-reporter": "^2.2.5",
"karma-typescript": "^4.1.1",
"mocha": "^6.2.0",
"mocha": "^6.2.2",
"prettier": "^1.18.2",
"typescript": "^3.6.3"
"typescript": "^3.6.4"
}
}

View file

@ -1,3 +1,21 @@
/* Copyright (C) 2019 Monomax Software Pty Ltd
*
* This file is part of Dnote.
*
* Dnote is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Dnote is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Dnote. If not, see <https://www.gnu.org/licenses/>.
*/
package repetition
import (

1231
web/package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -12,80 +12,80 @@
"author": "Monomax Software Pty Ltd",
"license": "AGPL-3.0-or-later",
"devDependencies": {
"@babel/core": "^7.6.2",
"@babel/plugin-transform-react-constant-elements": "^7.6.0",
"@babel/preset-env": "^7.6.2",
"@babel/preset-react": "^7.0.0",
"@babel/core": "^7.6.4",
"@babel/plugin-transform-react-constant-elements": "^7.6.3",
"@babel/preset-env": "^7.6.3",
"@babel/preset-react": "^7.6.3",
"@babel/register": "^7.6.2",
"@hot-loader/react-dom": "^16.9.0",
"@hot-loader/react-dom": "^16.10.2",
"@types/mocha": "^5.2.7",
"@types/react": "^16.9.4",
"@types/react-dom": "^16.9.1",
"@typescript-eslint/eslint-plugin": "^2.3.2",
"@typescript-eslint/parser": "^2.3.2",
"autoprefixer": "^9.6.1",
"@types/react": "^16.9.11",
"@types/react-dom": "^16.9.3",
"@typescript-eslint/eslint-plugin": "^2.6.0",
"@typescript-eslint/parser": "^2.6.0",
"autoprefixer": "^9.7.0",
"babel-eslint": "^10.0.3",
"babel-loader": "^8.0.6",
"chai": "^4.2.0",
"css-loader": "^3.2.0",
"cssnano": "^4.1.10",
"eslint": "^6.5.1",
"eslint": "^6.6.0",
"eslint-config-airbnb": "^18.0.1",
"eslint-config-prettier": "^6.3.0",
"eslint-config-prettier": "^6.5.0",
"eslint-plugin-import": "^2.18.2",
"eslint-plugin-jsx-a11y": "^6.2.3",
"eslint-plugin-prettier": "^3.1.1",
"eslint-plugin-react": "^7.15.1",
"eslint-plugin-react-hooks": "^2.1.1",
"fibers": "^4.0.1",
"eslint-plugin-react": "^7.16.0",
"eslint-plugin-react-hooks": "^2.2.0",
"fibers": "^4.0.2",
"file-loader": "^4.2.0",
"karma": "^4.3.0",
"karma": "^4.4.1",
"karma-chrome-launcher": "^3.1.0",
"karma-firefox-launcher": "^1.2.0",
"karma-mocha": "^1.3.0",
"karma-mocha-reporter": "^2.2.5",
"karma-webpack": "^4.0.2",
"mini-css-extract-plugin": "^0.8.0",
"mocha": "^6.2.1",
"node-sass": "^4.12.0",
"mocha": "^6.2.2",
"node-sass": "^4.13.0",
"postcss-loader": "^3.0.0",
"prettier": "^1.18.2",
"sass-loader": "^8.0.0",
"source-map-loader": "^0.2.4",
"source-map-support": "^0.5.13",
"source-map-support": "^0.5.15",
"style-loader": "^1.0.0",
"ts-loader": "^6.2.0",
"typescript": "^3.6.3",
"url-loader": "^2.1.0",
"ts-loader": "^6.2.1",
"typescript": "^3.6.4",
"url-loader": "^2.2.0",
"webpack-cli": "^3.3.9",
"webpack-dev-middleware": "^3.7.2",
"webpack-dev-server": "^3.8.1",
"webpack-dev-server": "^3.9.0",
"webpack-hot-middleware": "^2.25.0",
"webpack-manifest-plugin": "^2.1.2"
"webpack-manifest-plugin": "^2.2.0"
},
"dependencies": {
"@babel/plugin-proposal-class-properties": "^7.5.5",
"@types/classnames": "^2.2.9",
"@types/react-redux": "^7.1.4",
"@types/react-redux": "^7.1.5",
"@types/react-router-dom": "^5.1.0",
"classnames": "^2.2.5",
"core-js": "^3.2.1",
"core-js": "^3.3.5",
"highlight.js": "^9.15.10",
"history": "^4.10.1",
"markdown-it": "^9.0.0",
"qs": "^6.9.0",
"react": "^16.10.1",
"react-dom": "^16.10.1",
"react": "^16.11.0",
"react-dom": "^16.11.0",
"react-helmet": "^5.2.1",
"react-hot-loader": "^4.12.14",
"react-hot-loader": "^4.12.15",
"react-redux": "^7.1.1",
"react-router": "^5.1.2",
"react-router-config": "^5.1.1",
"react-router-dom": "^5.1.2",
"react-stripe-elements": "^5.0.1",
"react-stripe-elements": "^5.1.0",
"redux": "^4.0.4",
"redux-thunk": "^2.1.0",
"regenerator-runtime": "^0.13.3",
"webpack": "^4.41.0"
"webpack": "^4.41.2"
}
}

View file

@ -120,7 +120,7 @@ function useMobileMenuState(
return [isMobileMenuOpen, setMobileMenuOpen];
}
const App: React.SFC<Props> = ({ location }) => {
const App: React.FunctionComponent<Props> = ({ location }) => {
useFetchData();
useSavePrevLocation(location);
usePersistFilters(location);

View file

@ -33,7 +33,7 @@ interface Props {
onDeleteBook: (bookUUID) => void;
}
const BookItem: React.SFC<Props> = ({
const BookItem: React.FunctionComponent<Props> = ({
book,
isFocused,
setFocusedOptEl,

View file

@ -43,7 +43,7 @@ interface Props {
onDeleteBook: (string) => void;
}
const BookList: React.SFC<Props> = ({
const BookList: React.FunctionComponent<Props> = ({
isFetching,
isFetched,
books,

View file

@ -98,7 +98,7 @@ interface Props extends RouteComponentProps {
setSuccessMessage: (string) => void;
}
const Content: React.SFC<Props> = ({ history, setSuccessMessage }) => {
const Content: React.FunctionComponent<Props> = ({ history, setSuccessMessage }) => {
const { books } = useSelector(state => {
return {
books: state.books

View file

@ -28,7 +28,7 @@ interface Props {
id?: string;
}
const CreateBookButton: React.SFC<Props> = ({
const CreateBookButton: React.FunctionComponent<Props> = ({
id,
disabled,
openModal,

View file

@ -36,7 +36,7 @@ interface Props extends RouteComponentProps {
setSuccessMessage: (string) => void;
}
const CreateBookModal: React.SFC<Props> = ({
const CreateBookModal: React.FunctionComponent<Props> = ({
isOpen,
onDismiss,
onSuccess,

View file

@ -48,7 +48,7 @@ interface Props extends RouteComponentProps {
bookUUID: string;
}
const DeleteBookModal: React.SFC<Props> = ({
const DeleteBookModal: React.FunctionComponent<Props> = ({
isOpen,
onDismiss,
setSuccessMessage,

View file

@ -20,7 +20,7 @@ import React from 'react';
import styles from './EmptyList.scss';
const EmptyList: React.SFC = () => {
const EmptyList: React.FunctionComponent = () => {
return (
<div className={styles.wrapper}>
<p>No book found.</p>

View file

@ -21,7 +21,7 @@ import Helmet from 'react-helmet';
interface Props {}
const HeaderData: React.SFC<Props> = () => {
const HeaderData: React.FunctionComponent<Props> = () => {
return (
<Helmet>
<title>Books</title>

View file

@ -25,7 +25,7 @@ import Content from './Content';
import Flash from '../Common/Flash';
import HeadData from './HeadData';
const Books: React.SFC = () => {
const Books: React.FunctionComponent = () => {
const [successMessage, setSuccessMessage] = useState('');
const dispatch = useDispatch();

View file

@ -30,7 +30,7 @@ import { setMessage } from '../../store/ui';
interface Props extends RouteComponentProps {}
const ClassicDecrypt: React.SFC<Props> = ({ history }) => {
const ClassicDecrypt: React.FunctionComponent<Props> = ({ history }) => {
const [errMsg, setErrMsg] = useState('');
const [progressMsg, setProgressMsg] = useState('');
const [busy, setIsBusy] = useState(false);

View file

@ -33,7 +33,7 @@ import LoginForm from '../Login/LoginForm';
interface Props {}
const ClassicLogin: React.SFC<Props> = () => {
const ClassicLogin: React.FunctionComponent<Props> = () => {
const [errMsg, setErrMsg] = useState('');
const [submitting, setSubmitting] = useState(false);
const [emailVal, setEmailVal] = useState('');

View file

@ -29,7 +29,7 @@ import JoinForm from '../Join/JoinForm';
interface Props extends RouteComponentProps {}
const SetPassword: React.SFC<Props> = ({ history }) => {
const SetPassword: React.FunctionComponent<Props> = ({ history }) => {
const [errMsg, setErrMsg] = useState('');
const [submitting, setSubmitting] = useState(false);

View file

@ -34,7 +34,7 @@ import {
interface Props {}
const Classic: React.SFC<Props> = () => {
const Classic: React.FunctionComponent<Props> = () => {
const { user } = useSelector(state => {
return {
user: state.auth.user

View file

@ -40,7 +40,7 @@ interface Props {
tabIndex?: number;
}
const Button: React.SFC<Props> = ({
const Button: React.FunctionComponent<Props> = ({
id,
type,
kind,

View file

@ -41,7 +41,7 @@ function renderBody(isNew: boolean, label: string) {
return label;
}
const OptionItem: React.SFC<Props> = ({
const OptionItem: React.FunctionComponent<Props> = ({
option,
isSelected,
isFocused,

View file

@ -43,7 +43,7 @@ interface Props {
triggerRef?: React.MutableRefObject<HTMLElement>;
}
const BookSelector: React.SFC<Props> = ({
const BookSelector: React.FunctionComponent<Props> = ({
editor,
wrapperClassName,
triggerClassName,

View file

@ -25,7 +25,7 @@ interface Props {
content: string;
}
const Preview: React.SFC<Props> = ({ content }) => {
const Preview: React.FunctionComponent<Props> = ({ content }) => {
return (
<div
className={styles.wrapper}

View file

@ -35,7 +35,7 @@ interface Props {
disabled?: boolean;
}
const Textarea: React.SFC<Props> = ({
const Textarea: React.FunctionComponent<Props> = ({
sessionKey,
content,
onChange,

View file

@ -63,7 +63,7 @@ enum Mode {
preview
}
const Editor: React.SFC<Props> = ({
const Editor: React.FunctionComponent<Props> = ({
editor,
onSubmit,
isBusy,

View file

@ -44,7 +44,7 @@ interface Props {
actionsClassName?: string;
}
const EmailPreferenceForm: React.SFC<Props> = ({
const EmailPreferenceForm: React.FunctionComponent<Props> = ({
emailPreference,
token,
setSuccessMsg,

View file

@ -46,7 +46,7 @@ interface Props {
children: React.ReactNode;
}
const Flash: React.SFC<Props> = ({
const Flash: React.FunctionComponent<Props> = ({
id,
when,
kind,

View file

@ -1,2 +1,20 @@
/* Copyright (C) 2019 Monomax Software Pty Ltd
*
* This file is part of Dnote.
*
* Dnote is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Dnote is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Dnote. If not, see <https://www.gnu.org/licenses/>.
*/
export type Direction = 'top' | 'bottom';
export type Alignment = 'top' | 'bottom' | 'left' | 'right';

View file

@ -34,7 +34,7 @@ interface Props {
isOpen: boolean;
}
const MobileMenu: React.SFC<Props> = ({ onDismiss, isOpen }) => {
const MobileMenu: React.FunctionComponent<Props> = ({ onDismiss, isOpen }) => {
if (!isOpen) {
return null;
}

View file

@ -22,7 +22,7 @@ import styles from './ModalBody.scss';
interface Props {}
const Body: React.SFC<Props> = ({ children }) => {
const Body: React.FunctionComponent<Props> = ({ children }) => {
return <div className={styles.wrapper}>{children}</div>;
};

View file

@ -28,7 +28,7 @@ interface Props {
onDismiss: () => void;
}
const Header: React.SFC<Props> = ({ labelId, heading, onDismiss }) => {
const Header: React.FunctionComponent<Props> = ({ labelId, heading, onDismiss }) => {
return (
<div className={styles.wrapper}>
<strong id={labelId}>{heading}</strong>

View file

@ -40,7 +40,7 @@ interface Props extends RouteComponentProps {
modalClassName?: string;
}
const Modal: React.SFC<Props> = ({
const Modal: React.FunctionComponent<Props> = ({
isOpen,
onDismiss,
overlayClassName,

View file

@ -50,7 +50,7 @@ interface Props {
// TODO: Make a generic Select component that works for both single and multiple selection
// by passing of a flag
const MultiSelect: React.SFC<Props> = ({
const MultiSelect: React.FunctionComponent<Props> = ({
options,
currentOptions,
setCurrentOptions,

View file

@ -18,7 +18,7 @@
import React from 'react';
const NotFound: React.SFC = () => (
const NotFound: React.FunctionComponent = () => (
<div className="container">
<h1>Not found</h1>
</div>

View file

@ -52,7 +52,7 @@ interface Props {
labelClassName?: string;
}
const Card: React.SFC<Props> = ({
const Card: React.FunctionComponent<Props> = ({
cardElementRef,
setCardElementLoaded,
containerClassName,

View file

@ -30,7 +30,7 @@ interface Props {
labelClassName?: string;
}
const Country: React.SFC<Props> = ({
const Country: React.FunctionComponent<Props> = ({
value,
onUpdate,
containerClassName,

View file

@ -30,7 +30,7 @@ interface Props {
value: string;
}
const CountrySelect: React.SFC<Props> = ({
const CountrySelect: React.FunctionComponent<Props> = ({
id,
className,
onChange,

View file

@ -28,7 +28,7 @@ interface Props {
labelClassName?: string;
}
const NameOnCard: React.SFC<Props> = ({
const NameOnCard: React.FunctionComponent<Props> = ({
value,
onUpdate,
containerClassName,

View file

@ -37,7 +37,7 @@ interface Props {
hasBorder?: boolean;
}
const PopoverContent: React.SFC<Props> = ({
const PopoverContent: React.FunctionComponent<Props> = ({
contentId,
contentClassName,
onDismiss,

View file

@ -39,7 +39,7 @@ interface Props {
closeOnOutsideClick?: boolean;
}
const Popover: React.SFC<Props> = ({
const Popover: React.FunctionComponent<Props> = ({
contentClassName,
wrapperClassName,
renderContent,

View file

@ -30,7 +30,7 @@ interface Props {
setExpanded?: (boolean) => void;
}
const Actions: React.SFC<Props> = ({
const Actions: React.FunctionComponent<Props> = ({
onReset,
resetShown,
setExpanded,

View file

@ -39,7 +39,7 @@ interface Props {
inputId?: string;
}
const SearchInput: React.SFC<Props> = ({
const SearchInput: React.FunctionComponent<Props> = ({
value,
onChange,
inputClassName,

View file

@ -32,7 +32,7 @@ interface Props {
isSelected?: boolean;
}
const Item: React.SFC<Props> = ({
const Item: React.FunctionComponent<Props> = ({
children,
id,
value,

View file

@ -36,7 +36,7 @@ interface Props {
renderCreateOption: (Option, OptionParams) => React.ReactNode;
}
const Result: React.SFC<Props> = ({
const Result: React.FunctionComponent<Props> = ({
options,
menuId,
currentValue,

View file

@ -90,7 +90,7 @@ function useSetFocus({
}, [textboxValue, setFocusedIdx, targetIdx]);
}
const SearchableMenu: React.SFC<Props> = ({
const SearchableMenu: React.FunctionComponent<Props> = ({
menuId,
isOpen,
setIsOpen,

View file

@ -48,7 +48,7 @@ function matchMessagePath(location: Location, message: MessageState): string {
return null;
}
const SystemMessage: React.SFC<Props> = ({ location }) => {
const SystemMessage: React.FunctionComponent<Props> = ({ location }) => {
const { message } = useSelector(state => {
return {
message: state.ui.message

View file

@ -1,3 +1,21 @@
/* Copyright (C) 2019 Monomax Software Pty Ltd
*
* This file is part of Dnote.
*
* Dnote is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Dnote is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Dnote. If not, see <https://www.gnu.org/licenses/>.
*/
import React from 'react';
import {

View file

@ -39,7 +39,7 @@ interface Props extends RouteComponentProps {
setErrMessage: React.Dispatch<string>;
}
const Edit: React.SFC<Props> = ({
const Edit: React.FunctionComponent<Props> = ({
noteUUID,
persisted,
editor,

View file

@ -36,7 +36,7 @@ interface Match {
interface Props extends RouteComponentProps<Match> {}
const Edit: React.SFC<Props> = ({ match }) => {
const Edit: React.FunctionComponent<Props> = ({ match }) => {
const { noteUUID } = match.params;
const sessionKey = getEditorSessionkey(noteUUID);

View file

@ -35,7 +35,7 @@ interface Props {
user: UserData;
}
const AccountMenu: React.SFC<Props> = ({ user }) => {
const AccountMenu: React.FunctionComponent<Props> = ({ user }) => {
const [isOpen, setIsOpen] = useState(false);
const optRefs = [useRef(null), useRef(null), useRef(null)];

View file

@ -27,7 +27,7 @@ interface Props {
label: string;
}
const Item: React.SFC<Props> = ({ to, label }) => {
const Item: React.FunctionComponent<Props> = ({ to, label }) => {
return (
<li className={styles.wrapper}>
<Link to={to} className={styles.link}>

View file

@ -28,7 +28,7 @@ interface Props {
filters: Filters;
}
const Nav: React.SFC<Props> = ({ filters }) => {
const Nav: React.FunctionComponent<Props> = ({ filters }) => {
const searchObj = toSearchObj(filters);
return (

View file

@ -42,7 +42,7 @@ function getHomeDest(location: Location, filters: FiltersState) {
return getHomePath(filters);
}
const NormalHeader: React.SFC<Props> = ({ location }) => {
const NormalHeader: React.FunctionComponent<Props> = ({ location }) => {
const filters = useFilters();
const searchObj = toSearchObj(filters);

View file

@ -23,7 +23,7 @@ import Logo from '../../Icons/Logo';
import { getHomePath } from 'web/libs/paths';
import styles from './Guest.scss';
const UserNoteHeader: React.SFC = () => {
const UserNoteHeader: React.FunctionComponent = () => {
return (
<header className={styles.wrapper}>
<div className={styles.content}>

View file

@ -22,7 +22,7 @@ import styles from './Placeholder.scss';
interface Props {}
const Placeholder: React.SFC<Props> = () => {
const Placeholder: React.FunctionComponent<Props> = () => {
return <div className={styles.wrapper} />;
};

View file

@ -25,7 +25,7 @@ import Placeholder from './Placeholder';
interface Props {}
const NoteHeader: React.SFC<Props> = () => {
const NoteHeader: React.FunctionComponent<Props> = () => {
const { user } = useSelector(state => {
return {
user: state.auth.user

View file

@ -117,7 +117,7 @@ function useSetSuggestionVisibility(
}, [setIsOpen, triggerRef, inputValue, prevInputValue]);
}
const BookSearch: React.SFC<Props> = ({ value, setValue, disabled }) => {
const BookSearch: React.FunctionComponent<Props> = ({ value, setValue, disabled }) => {
const [isOpen, setIsOpen] = useState(false);
const [focusedIdx, setFocusedIdx] = useState(0);
const [focusedOptEl, setFocusedOptEl] = useState(null);

View file

@ -27,7 +27,7 @@ interface Props {
disabled: boolean;
}
const WordsSearch: React.SFC<Props> = ({ words, setWords, disabled }) => {
const WordsSearch: React.FunctionComponent<Props> = ({ words, setWords, disabled }) => {
return (
<section className={styles.section}>
<label htmlFor="has-words" className={styles.label}>

View file

@ -104,7 +104,7 @@ function encodeBookStr(s: string): string[] {
return ret;
}
const AdvancedPanel: React.SFC<Props> = ({
const AdvancedPanel: React.FunctionComponent<Props> = ({
onDismiss,
history,
location,

View file

@ -33,7 +33,7 @@ const searchDelay = 930;
interface Props extends RouteComponentProps {}
const SearchBar: React.SFC<Props> = ({ location, history }) => {
const SearchBar: React.FunctionComponent<Props> = ({ location, history }) => {
const searchTimerRef = useRef(null);
const filters = useFilters();

View file

@ -26,7 +26,7 @@ import styles from './SubscriptionHeader.scss';
interface Props {}
const SubscriptionsHeader: React.SFC<Props> = () => {
const SubscriptionsHeader: React.FunctionComponent<Props> = () => {
const { user } = useSelector(state => {
return {
user: state.auth.user.data

View file

@ -48,7 +48,7 @@ interface PageLinkProps {
className?: string;
}
const PageLink: React.SFC<PageLinkProps> = ({
const PageLink: React.FunctionComponent<PageLinkProps> = ({
direction,
disabled,
className
@ -93,7 +93,7 @@ const PageLink: React.SFC<PageLinkProps> = ({
interface PaginatorProps {}
const Paginator: React.SFC<PaginatorProps> = () => {
const Paginator: React.FunctionComponent<PaginatorProps> = () => {
const filters = useFilters();
const { notes } = useSelector(state => {
return {

View file

@ -28,7 +28,7 @@ interface Props {
position?: Position;
}
const TopActions: React.SFC<Props> = ({ position }) => {
const TopActions: React.FunctionComponent<Props> = ({ position }) => {
return (
<div
className={classnames(styles.wrapper, {

View file

@ -33,7 +33,7 @@ function getTitle(filters: Filters): string {
return 'Notes';
}
const HeaderData: React.SFC<Props> = ({ filters }) => {
const HeaderData: React.FunctionComponent<Props> = ({ filters }) => {
const title = getTitle(filters);
return (

View file

@ -37,7 +37,7 @@ function toDatetime(year: number, month: number) {
return `${year}-${monthStr}`;
}
const Header: React.SFC<Props> = ({ year, month }) => {
const Header: React.FunctionComponent<Props> = ({ year, month }) => {
const monthName = monthNumToFullName(month);
const datetime = toDatetime(year, month);

View file

@ -63,7 +63,7 @@ interface Props {
filters: Filters;
}
const NoteGroupList: React.SFC<Props> = ({
const NoteGroupList: React.FunctionComponent<Props> = ({
groups,
pro,
filters,

View file

@ -72,7 +72,7 @@ interface Props {
filters: Filters;
}
const NoteItem: React.SFC<Props> = ({ note, filters }) => {
const NoteItem: React.FunctionComponent<Props> = ({ note, filters }) => {
return (
<li className={classnames('T-note-item', styles.wrapper, {})}>
<Link

View file

@ -39,7 +39,7 @@ const HeaderHolder = () => {
);
};
const Placeholder: React.SFC = () => {
const Placeholder: React.FunctionComponent = () => {
return (
<Fragment>
<HeaderHolder />

View file

@ -37,7 +37,7 @@ interface Props {
filters: Filters;
}
const NoteGroup: React.SFC<Props> = ({ group, isFirst, filters }) => {
const NoteGroup: React.FunctionComponent<Props> = ({ group, isFirst, filters }) => {
const { year, month } = group;
return (

View file

@ -60,7 +60,7 @@ function useFetchNotes(filters: Filters) {
}, [dispatch, filters, prevFilters, user]);
}
const Home: React.SFC<Props> = ({ location }) => {
const Home: React.FunctionComponent<Props> = ({ location }) => {
const { notes, user } = useSelector(state => {
return {
user: state.auth.user.data,

View file

@ -34,7 +34,7 @@ interface Props {
cta?: string;
}
const JoinForm: React.SFC<Props> = ({
const JoinForm: React.FunctionComponent<Props> = ({
onJoin,
submitting,
email,

View file

@ -33,7 +33,7 @@ import { useSelector, useDispatch } from '../../store';
interface Props extends RouteComponentProps<any> {}
const Join: React.SFC<Props> = ({ location }) => {
const Join: React.FunctionComponent<Props> = ({ location }) => {
const [errMsg, setErrMsg] = useState('');
const [submitting, setSubmitting] = useState(false);
const { formData } = useSelector(state => {

View file

@ -30,7 +30,7 @@ interface Props {
onUpdateEmail: (string) => void;
}
const LoginForm: React.SFC<Props> = ({
const LoginForm: React.FunctionComponent<Props> = ({
onLogin,
submitting,
email,

View file

@ -33,7 +33,7 @@ import { useSelector, useDispatch } from '../../store';
interface Props extends RouteComponentProps<any> {}
const Login: React.SFC<Props> = ({ location }) => {
const Login: React.FunctionComponent<Props> = ({ location }) => {
const [errMsg, setErrMsg] = useState('');
const [submitting, setSubmitting] = useState(false);
const dispatch = useDispatch();

View file

@ -57,7 +57,7 @@ function useInitFocus({ bookLabel, content, textareaRef, setTriggerFocus }) {
}, [setTriggerFocus, bookLabel, textareaRef]);
}
const New: React.SFC<Props> = ({ editor, persisted, history }) => {
const New: React.FunctionComponent<Props> = ({ editor, persisted, history }) => {
const dispatch = useDispatch();
const [errMessage, setErrMessage] = useState('');
const [submitting, setSubmitting] = useState(false);

View file

@ -37,7 +37,7 @@ import styles from './New.scss';
interface Props extends RouteComponentProps {}
const New: React.SFC<Props> = ({ history }) => {
const New: React.FunctionComponent<Props> = ({ history }) => {
const sessionKey = getEditorSessionkey(null);
const { editor } = useSelector(state => {
return {

View file

@ -20,7 +20,7 @@ import React from 'react';
interface Props {}
const Actions: React.SFC<Props> = () => {
const Actions: React.FunctionComponent<Props> = () => {
return <div>Actions</div>;
};

View file

@ -34,7 +34,7 @@ interface Props extends RouteComponentProps {
noteUUID: string;
}
const DeleteNoteModal: React.SFC<Props> = ({
const DeleteNoteModal: React.FunctionComponent<Props> = ({
isOpen,
onDismiss,
noteUUID,

View file

@ -56,7 +56,7 @@ interface Props {
note: NoteState;
}
const HeaderData: React.SFC<Props> = ({ note }) => {
const HeaderData: React.FunctionComponent<Props> = ({ note }) => {
const title = getTitle(note);
const description = getDescription(note);

View file

@ -79,7 +79,7 @@ interface Props {
onDeleteModalOpen: () => void;
}
const Content: React.SFC<Props> = ({ onDeleteModalOpen }) => {
const Content: React.FunctionComponent<Props> = ({ onDeleteModalOpen }) => {
const { note, user } = useSelector(state => {
return {
note: state.note.data,

View file

@ -24,7 +24,7 @@ import noteStyles from './NoteContent.scss';
interface Props {}
const Placeholder: React.SFC<Props> = () => {
const Placeholder: React.FunctionComponent<Props> = () => {
return (
<div className={noteStyles.frame}>
<div className={noteStyles.header}>

View file

@ -61,7 +61,7 @@ function useFetchData(
}, [dispatch, noteUUID, search]);
}
const Note: React.SFC<Props> = ({ match, location }) => {
const Note: React.FunctionComponent<Props> = ({ match, location }) => {
const { params } = match;
const { noteUUID } = params;

View file

@ -26,7 +26,7 @@ interface Props {
submitting: boolean;
}
const PasswordResetConfirmForm: React.SFC<Props> = ({
const PasswordResetConfirmForm: React.FunctionComponent<Props> = ({
onResetPassword,
submitting
}) => {

View file

@ -36,7 +36,7 @@ interface Match {
interface Props extends RouteComponentProps<Match> {}
const PasswordResetConfirm: React.SFC<Props> = ({ match, history }) => {
const PasswordResetConfirm: React.FunctionComponent<Props> = ({ match, history }) => {
const [errorMsg, setErrorMsg] = useState('');
const [submitting, setSubmitting] = useState(false);
const dispatch = useDispatch();

View file

@ -28,7 +28,7 @@ interface Props {
submitting: boolean;
}
const PasswordResetRequestForm: React.SFC<Props> = ({
const PasswordResetRequestForm: React.FunctionComponent<Props> = ({
onSubmit,
submitting
}) => {

View file

@ -30,7 +30,7 @@ import styles from './Request.scss';
interface Props {}
const PasswordResetRequest: React.SFC<Props> = () => {
const PasswordResetRequest: React.FunctionComponent<Props> = () => {
const [errorMsg, setErrorMsg] = useState('');
const [submitting, setSubmitting] = useState(false);
const [processed, setProcessed] = useState(false);

View file

@ -30,7 +30,7 @@ interface Props {
token?: string;
}
const Content: React.SFC<Props> = ({
const Content: React.FunctionComponent<Props> = ({
data,
token,
setSuccessMsg,

View file

@ -36,7 +36,7 @@ interface Match {
}
interface Props extends RouteComponentProps<Match> {}
const EmailPreferenceRepetition: React.SFC<Props> = ({ location, match }) => {
const EmailPreferenceRepetition: React.FunctionComponent<Props> = ({ location, match }) => {
const [data, setData] = useState(null);
const [isFetching, setIsFetching] = useState(false);
const [successMsg, setSuccessMsg] = useState('');

View file

@ -1,3 +1,21 @@
/* Copyright (C) 2019 Monomax Software Pty Ltd
*
* This file is part of Dnote.
*
* Dnote is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Dnote is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Dnote. If not, see <https://www.gnu.org/licenses/>.
*/
import React from 'react';
import { withRouter, RouteComponentProps } from 'react-router-dom';
@ -14,7 +32,7 @@ interface Props extends RouteComponentProps {
data: RepetitionRuleData;
}
const RepetitionEditContent: React.SFC<Props> = ({
const RepetitionEditContent: React.FunctionComponent<Props> = ({
history,
setErrMsg,
data

View file

@ -0,0 +1,18 @@
/* Copyright (C) 2019 Monomax Software Pty Ltd
*
* This file is part of Dnote.
*
* Dnote is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Dnote is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Dnote. If not, see <https://www.gnu.org/licenses/>.
*/

View file

@ -1,3 +1,21 @@
/* Copyright (C) 2019 Monomax Software Pty Ltd
*
* This file is part of Dnote.
*
* Dnote is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Dnote is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Dnote. If not, see <https://www.gnu.org/licenses/>.
*/
import React, { useState, useEffect } from 'react';
import Helmet from 'react-helmet';
import { Link, withRouter, RouteComponentProps } from 'react-router-dom';

View file

@ -0,0 +1,18 @@
/* Copyright (C) 2019 Monomax Software Pty Ltd
*
* This file is part of Dnote.
*
* Dnote is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Dnote is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Dnote. If not, see <https://www.gnu.org/licenses/>.
*/

View file

@ -1,3 +1,21 @@
/* Copyright (C) 2019 Monomax Software Pty Ltd
*
* This file is part of Dnote.
*
* Dnote is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Dnote is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Dnote. If not, see <https://www.gnu.org/licenses/>.
*/
import React, { useState, useEffect } from 'react';
import Helmet from 'react-helmet';
import { Link, withRouter, RouteComponentProps } from 'react-router-dom';

View file

@ -1,3 +1,21 @@
/* Copyright (C) 2019 Monomax Software Pty Ltd
*
* This file is part of Dnote.
*
* Dnote is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Dnote is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Dnote. If not, see <https://www.gnu.org/licenses/>.
*/
import React from 'react';
import { BookDomain } from 'jslib/operations/types';

View file

@ -1,3 +1,21 @@
/* Copyright (C) 2019 Monomax Software Pty Ltd
*
* This file is part of Dnote.
*
* Dnote is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Dnote is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Dnote. If not, see <https://www.gnu.org/licenses/>.
*/
import React, { useState } from 'react';
import classnames from 'classnames';

View file

@ -1,3 +1,21 @@
/* Copyright (C) 2019 Monomax Software Pty Ltd
*
* This file is part of Dnote.
*
* Dnote is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Dnote is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Dnote. If not, see <https://www.gnu.org/licenses/>.
*/
import React from 'react';
import classnames from 'classnames';
@ -12,7 +30,7 @@ interface Props {
setRuleUUIDToDelete: React.Dispatch<any>;
}
const ReptitionList: React.SFC<Props> = ({
const ReptitionList: React.FunctionComponent<Props> = ({
isFetching,
isFetched,
items,

View file

@ -1,3 +1,21 @@
/* Copyright (C) 2019 Monomax Software Pty Ltd
*
* This file is part of Dnote.
*
* Dnote is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Dnote is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Dnote. If not, see <https://www.gnu.org/licenses/>.
*/
import React, { useState, useEffect } from 'react';
import Helmet from 'react-helmet';
import { Link } from 'react-router-dom';

Some files were not shown because too many files have changed in this diff Show more