Compare commits
20 Commits
pkg/dev/ub
...
develop
Author | SHA1 | Date | |
---|---|---|---|
0af54a0d52 | |||
d8dcf636ea | |||
6bb8afd914 | |||
3eb96fc75e | |||
d6597270dd | |||
fbad143bed | |||
e3459d136e | |||
fe0e2667a0 | |||
0e93e7c52f | |||
832cca1c66 | |||
94bfb77d87 | |||
5a677d2491 | |||
fbb2b3f8da | |||
44182fd1cd | |||
4e9298f5b6 | |||
9dce43fd58 | |||
3fa2b5905a | |||
b456fe9f65 | |||
7309a2157b | |||
79a12e89f7 |
@ -9,6 +9,7 @@
|
|||||||
### Procédure
|
### Procédure
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
cd client && npm install # Installation des dépendances client
|
||||||
make watch # Surveiller les modifications sur le sources et compiler/démarrer le serveur
|
make watch # Surveiller les modifications sur le sources et compiler/démarrer le serveur
|
||||||
```
|
```
|
||||||
|
|
||||||
|
153
client/package-lock.json
generated
153
client/package-lock.json
generated
@ -1162,22 +1162,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@babel/runtime-corejs2": {
|
|
||||||
"version": "7.7.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.7.4.tgz",
|
|
||||||
"integrity": "sha512-hKNcmHQbBSJFnZ82ewYtWDZ3fXkP/l1XcfRtm7c8gHPM/DMecJtFFBEp7KMLZTuHwwb7RfemHdsEnd7L916Z6A==",
|
|
||||||
"requires": {
|
|
||||||
"core-js": "^2.6.5",
|
|
||||||
"regenerator-runtime": "^0.13.2"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"regenerator-runtime": {
|
|
||||||
"version": "0.13.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
|
|
||||||
"integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw=="
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@babel/template": {
|
"@babel/template": {
|
||||||
"version": "7.7.0",
|
"version": "7.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz",
|
||||||
@ -1259,11 +1243,11 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@lourenci/react-kanban": {
|
"@lourenci/react-kanban": {
|
||||||
"version": "0.15.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/@lourenci/react-kanban/-/react-kanban-0.15.0.tgz",
|
"resolved": "https://registry.npmjs.org/@lourenci/react-kanban/-/react-kanban-2.0.0.tgz",
|
||||||
"integrity": "sha512-/2XjB26iXcvpwDwlT3sz8/ptQ7QyTpMGlrPf1f02+V1Z4jdbVMo6Luz1sGlHe/TP68N8yz69/YT9qwqHZ6YYmQ==",
|
"integrity": "sha512-ieNi7d/01wgT9t8kN7Z/RBubyZq9VvKXyU/5sj+UlrY8h4GPRNrN11jLV/ykg55lhyXGKgXDk3ObYurOfrmu3w==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"react-beautiful-dnd": "^11.0.0"
|
"react-beautiful-dnd": "^13.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@redux-saga/core": {
|
"@redux-saga/core": {
|
||||||
@ -1316,7 +1300,8 @@
|
|||||||
"@types/history": {
|
"@types/history": {
|
||||||
"version": "4.7.5",
|
"version": "4.7.5",
|
||||||
"resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.5.tgz",
|
||||||
"integrity": "sha512-wLD/Aq2VggCJXSjxEwrMafIP51Z+13H78nXIX0ABEuIGhmB5sNGbR113MOKo+yfw+RDo1ZU3DM6yfnnRF/+ouw=="
|
"integrity": "sha512-wLD/Aq2VggCJXSjxEwrMafIP51Z+13H78nXIX0ABEuIGhmB5sNGbR113MOKo+yfw+RDo1ZU3DM6yfnnRF/+ouw==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"@types/hoist-non-react-statics": {
|
"@types/hoist-non-react-statics": {
|
||||||
"version": "3.3.1",
|
"version": "3.3.1",
|
||||||
@ -1331,17 +1316,20 @@
|
|||||||
"@types/node": {
|
"@types/node": {
|
||||||
"version": "13.13.4",
|
"version": "13.13.4",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.4.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.4.tgz",
|
||||||
"integrity": "sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA=="
|
"integrity": "sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"@types/prop-types": {
|
"@types/prop-types": {
|
||||||
"version": "15.7.3",
|
"version": "15.7.3",
|
||||||
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz",
|
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz",
|
||||||
"integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw=="
|
"integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"@types/react": {
|
"@types/react": {
|
||||||
"version": "16.9.34",
|
"version": "16.9.34",
|
||||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.34.tgz",
|
"resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.34.tgz",
|
||||||
"integrity": "sha512-8AJlYMOfPe1KGLKyHpflCg5z46n0b5DbRfqDksxBLBTUpB75ypDBAO9eCUcjNwE6LCUslwTz00yyG/X9gaVtow==",
|
"integrity": "sha512-8AJlYMOfPe1KGLKyHpflCg5z46n0b5DbRfqDksxBLBTUpB75ypDBAO9eCUcjNwE6LCUslwTz00yyG/X9gaVtow==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/prop-types": "*",
|
"@types/prop-types": "*",
|
||||||
"csstype": "^2.2.0"
|
"csstype": "^2.2.0"
|
||||||
@ -1351,6 +1339,7 @@
|
|||||||
"version": "16.9.7",
|
"version": "16.9.7",
|
||||||
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.7.tgz",
|
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.7.tgz",
|
||||||
"integrity": "sha512-GHTYhM8/OwUCf254WO5xqR/aqD3gC9kSTLpopWGpQLpnw23jk44RvMHsyUSEplvRJZdHxhJGMMLF0kCPYHPhQA==",
|
"integrity": "sha512-GHTYhM8/OwUCf254WO5xqR/aqD3gC9kSTLpopWGpQLpnw23jk44RvMHsyUSEplvRJZdHxhJGMMLF0kCPYHPhQA==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/react": "*"
|
"@types/react": "*"
|
||||||
}
|
}
|
||||||
@ -1371,6 +1360,7 @@
|
|||||||
"version": "5.1.7",
|
"version": "5.1.7",
|
||||||
"resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.7.tgz",
|
"resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.7.tgz",
|
||||||
"integrity": "sha512-2ouP76VQafKjtuc0ShpwUebhHwJo0G6rhahW9Pb8au3tQTjYXd2jta4wv6U2tGLR/I42yuG00+UXjNYY0dTzbg==",
|
"integrity": "sha512-2ouP76VQafKjtuc0ShpwUebhHwJo0G6rhahW9Pb8au3tQTjYXd2jta4wv6U2tGLR/I42yuG00+UXjNYY0dTzbg==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/history": "*",
|
"@types/history": "*",
|
||||||
"@types/react": "*"
|
"@types/react": "*"
|
||||||
@ -1380,6 +1370,7 @@
|
|||||||
"version": "5.1.5",
|
"version": "5.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.5.tgz",
|
||||||
"integrity": "sha512-ArBM4B1g3BWLGbaGvwBGO75GNFbLDUthrDojV2vHLih/Tq8M+tgvY1DSwkuNrPSwdp/GUL93WSEpTZs8nVyJLw==",
|
"integrity": "sha512-ArBM4B1g3BWLGbaGvwBGO75GNFbLDUthrDojV2vHLih/Tq8M+tgvY1DSwkuNrPSwdp/GUL93WSEpTZs8nVyJLw==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/history": "*",
|
"@types/history": "*",
|
||||||
"@types/react": "*",
|
"@types/react": "*",
|
||||||
@ -1389,7 +1380,8 @@
|
|||||||
"@types/uuid": {
|
"@types/uuid": {
|
||||||
"version": "7.0.3",
|
"version": "7.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-7.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-7.0.3.tgz",
|
||||||
"integrity": "sha512-PUdqTZVrNYTNcIhLHkiaYzoOIaUi5LFg/XLerAdgvwQrUCx+oSbtoBze1AMyvYbcwzUSNC+Isl58SM4Sm/6COw=="
|
"integrity": "sha512-PUdqTZVrNYTNcIhLHkiaYzoOIaUi5LFg/XLerAdgvwQrUCx+oSbtoBze1AMyvYbcwzUSNC+Isl58SM4Sm/6COw==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"@webassemblyjs/ast": {
|
"@webassemblyjs/ast": {
|
||||||
"version": "1.8.5",
|
"version": "1.8.5",
|
||||||
@ -1963,7 +1955,8 @@
|
|||||||
"big.js": {
|
"big.js": {
|
||||||
"version": "5.2.2",
|
"version": "5.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
|
||||||
"integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
|
"integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"binary-extensions": {
|
"binary-extensions": {
|
||||||
"version": "1.13.1",
|
"version": "1.13.1",
|
||||||
@ -2159,6 +2152,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/bulma/-/bulma-0.7.5.tgz",
|
"resolved": "https://registry.npmjs.org/bulma/-/bulma-0.7.5.tgz",
|
||||||
"integrity": "sha512-cX98TIn0I6sKba/DhW0FBjtaDpxTelU166pf7ICXpCCuplHWyu6C9LYZmL5PEsnePIeJaiorsTEzzNk3Tsm1hw=="
|
"integrity": "sha512-cX98TIn0I6sKba/DhW0FBjtaDpxTelU166pf7ICXpCCuplHWyu6C9LYZmL5PEsnePIeJaiorsTEzzNk3Tsm1hw=="
|
||||||
},
|
},
|
||||||
|
"bulma-switch": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/bulma-switch/-/bulma-switch-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-myD38zeUfjmdduq+pXabhJEe3x2hQP48l/OI+Y0fO3HdDynZUY/VJygucvEAJKRjr4HxD5DnEm4yx+oDOBXpAA=="
|
||||||
|
},
|
||||||
"cacache": {
|
"cacache": {
|
||||||
"version": "12.0.3",
|
"version": "12.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz",
|
||||||
@ -2516,7 +2514,8 @@
|
|||||||
"core-js": {
|
"core-js": {
|
||||||
"version": "2.6.10",
|
"version": "2.6.10",
|
||||||
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz",
|
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz",
|
||||||
"integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA=="
|
"integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"core-js-compat": {
|
"core-js-compat": {
|
||||||
"version": "3.4.1",
|
"version": "3.4.1",
|
||||||
@ -2539,7 +2538,8 @@
|
|||||||
"core-util-is": {
|
"core-util-is": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"create-ecdh": {
|
"create-ecdh": {
|
||||||
"version": "4.0.3",
|
"version": "4.0.3",
|
||||||
@ -2620,9 +2620,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"css-box-model": {
|
"css-box-model": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz",
|
||||||
"integrity": "sha512-lri0br+jSNV0kkkiGEp9y9y3Njq2PmpqbeGWRFQJuZteZzY9iC9GZhQ8Y4WpPwM/2YocjHePxy14igJY7YKzkA==",
|
"integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"tiny-invariant": "^1.0.6"
|
"tiny-invariant": "^1.0.6"
|
||||||
}
|
}
|
||||||
@ -2700,7 +2700,8 @@
|
|||||||
"csstype": {
|
"csstype": {
|
||||||
"version": "2.6.10",
|
"version": "2.6.10",
|
||||||
"resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.10.tgz",
|
"resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.10.tgz",
|
||||||
"integrity": "sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w=="
|
"integrity": "sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"currently-unhandled": {
|
"currently-unhandled": {
|
||||||
"version": "0.4.1",
|
"version": "0.4.1",
|
||||||
@ -2962,7 +2963,8 @@
|
|||||||
"emojis-list": {
|
"emojis-list": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
|
||||||
"integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
|
"integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"end-of-stream": {
|
"end-of-stream": {
|
||||||
"version": "1.4.4",
|
"version": "1.4.4",
|
||||||
@ -2977,6 +2979,7 @@
|
|||||||
"version": "4.1.1",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz",
|
||||||
"integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==",
|
"integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"graceful-fs": "^4.1.2",
|
"graceful-fs": "^4.1.2",
|
||||||
"memory-fs": "^0.5.0",
|
"memory-fs": "^0.5.0",
|
||||||
@ -2993,6 +2996,7 @@
|
|||||||
"version": "0.1.7",
|
"version": "0.1.7",
|
||||||
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
|
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
|
||||||
"integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
|
"integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"prr": "~1.0.1"
|
"prr": "~1.0.1"
|
||||||
}
|
}
|
||||||
@ -4213,7 +4217,8 @@
|
|||||||
"graceful-fs": {
|
"graceful-fs": {
|
||||||
"version": "4.2.3",
|
"version": "4.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
|
||||||
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
|
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"gud": {
|
"gud": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
@ -4572,7 +4577,8 @@
|
|||||||
"inherits": {
|
"inherits": {
|
||||||
"version": "2.0.4",
|
"version": "2.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
|
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"ini": {
|
"ini": {
|
||||||
"version": "1.3.5",
|
"version": "1.3.5",
|
||||||
@ -4813,7 +4819,8 @@
|
|||||||
"isarray": {
|
"isarray": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
|
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"isexe": {
|
"isexe": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
@ -4890,6 +4897,7 @@
|
|||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
|
||||||
"integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
|
"integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"minimist": "^1.2.0"
|
"minimist": "^1.2.0"
|
||||||
}
|
}
|
||||||
@ -4944,6 +4952,7 @@
|
|||||||
"version": "1.2.3",
|
"version": "1.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
|
||||||
"integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
|
"integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"big.js": "^5.2.2",
|
"big.js": "^5.2.2",
|
||||||
"emojis-list": "^2.0.0",
|
"emojis-list": "^2.0.0",
|
||||||
@ -5098,6 +5107,7 @@
|
|||||||
"version": "0.5.0",
|
"version": "0.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
|
||||||
"integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
|
"integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"errno": "^0.1.3",
|
"errno": "^0.1.3",
|
||||||
"readable-stream": "^2.0.1"
|
"readable-stream": "^2.0.1"
|
||||||
@ -5226,7 +5236,8 @@
|
|||||||
"minimist": {
|
"minimist": {
|
||||||
"version": "1.2.5",
|
"version": "1.2.5",
|
||||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
||||||
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
|
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"mississippi": {
|
"mississippi": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
@ -5871,7 +5882,8 @@
|
|||||||
"picomatch": {
|
"picomatch": {
|
||||||
"version": "2.2.2",
|
"version": "2.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
|
||||||
"integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg=="
|
"integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"pify": {
|
"pify": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
@ -6031,7 +6043,8 @@
|
|||||||
"process-nextick-args": {
|
"process-nextick-args": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
||||||
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
|
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"promise-inflight": {
|
"promise-inflight": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
@ -6052,7 +6065,8 @@
|
|||||||
"prr": {
|
"prr": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
|
||||||
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
|
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"pseudomap": {
|
"pseudomap": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
@ -6172,18 +6186,32 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"react-beautiful-dnd": {
|
"react-beautiful-dnd": {
|
||||||
"version": "11.0.5",
|
"version": "13.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/react-beautiful-dnd/-/react-beautiful-dnd-11.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/react-beautiful-dnd/-/react-beautiful-dnd-13.0.0.tgz",
|
||||||
"integrity": "sha512-7llby9U+jIfkINcyxPHVWU0HFYzqxMemUYgGHsFsbx4fZo1n/pW6sYKYzhxGxR3Ap5HxqswcQkKUZX4uEUWhlw==",
|
"integrity": "sha512-87It8sN0ineoC3nBW0SbQuTFXM6bUqM62uJGY4BtTf0yzPl8/3+bHMWkgIe0Z6m8e+gJgjWxefGRVfpE3VcdEg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/runtime-corejs2": "^7.4.5",
|
"@babel/runtime": "^7.8.4",
|
||||||
"css-box-model": "^1.1.2",
|
"css-box-model": "^1.2.0",
|
||||||
"memoize-one": "^5.0.4",
|
"memoize-one": "^5.1.1",
|
||||||
"raf-schd": "^4.0.0",
|
"raf-schd": "^4.0.2",
|
||||||
"react-redux": "^7.0.3",
|
"react-redux": "^7.1.1",
|
||||||
"redux": "^4.0.1",
|
"redux": "^4.0.4",
|
||||||
"tiny-invariant": "^1.0.4",
|
"use-memo-one": "^1.1.1"
|
||||||
"use-memo-one": "^1.1.0"
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/runtime": {
|
||||||
|
"version": "7.10.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.2.tgz",
|
||||||
|
"integrity": "sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg==",
|
||||||
|
"requires": {
|
||||||
|
"regenerator-runtime": "^0.13.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"regenerator-runtime": {
|
||||||
|
"version": "0.13.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
|
||||||
|
"integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"react-dom": {
|
"react-dom": {
|
||||||
@ -6271,6 +6299,7 @@
|
|||||||
"version": "2.3.6",
|
"version": "2.3.6",
|
||||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
|
||||||
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
|
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"core-util-is": "~1.0.0",
|
"core-util-is": "~1.0.0",
|
||||||
"inherits": "~2.0.3",
|
"inherits": "~2.0.3",
|
||||||
@ -6708,7 +6737,8 @@
|
|||||||
"safe-buffer": {
|
"safe-buffer": {
|
||||||
"version": "5.1.2",
|
"version": "5.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"safe-regex": {
|
"safe-regex": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
@ -7211,6 +7241,7 @@
|
|||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
||||||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"safe-buffer": "~5.1.0"
|
"safe-buffer": "~5.1.0"
|
||||||
}
|
}
|
||||||
@ -7312,7 +7343,8 @@
|
|||||||
"tapable": {
|
"tapable": {
|
||||||
"version": "1.1.3",
|
"version": "1.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
|
||||||
"integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA=="
|
"integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"tar": {
|
"tar": {
|
||||||
"version": "2.2.2",
|
"version": "2.2.2",
|
||||||
@ -7492,6 +7524,7 @@
|
|||||||
"version": "7.0.2",
|
"version": "7.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-7.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-7.0.2.tgz",
|
||||||
"integrity": "sha512-DwpZFB67RoILQHx42dMjSgv2STpacsQu5X+GD/H9ocd8IhU0m8p3b/ZrIln2KmcucC6xep2PdEMEblpWT71euA==",
|
"integrity": "sha512-DwpZFB67RoILQHx42dMjSgv2STpacsQu5X+GD/H9ocd8IhU0m8p3b/ZrIln2KmcucC6xep2PdEMEblpWT71euA==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"chalk": "^2.3.0",
|
"chalk": "^2.3.0",
|
||||||
"enhanced-resolve": "^4.0.0",
|
"enhanced-resolve": "^4.0.0",
|
||||||
@ -7504,6 +7537,7 @@
|
|||||||
"version": "3.2.1",
|
"version": "3.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
||||||
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"color-convert": "^1.9.0"
|
"color-convert": "^1.9.0"
|
||||||
}
|
}
|
||||||
@ -7512,6 +7546,7 @@
|
|||||||
"version": "3.0.2",
|
"version": "3.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
|
||||||
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
|
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"fill-range": "^7.0.1"
|
"fill-range": "^7.0.1"
|
||||||
}
|
}
|
||||||
@ -7520,6 +7555,7 @@
|
|||||||
"version": "2.4.2",
|
"version": "2.4.2",
|
||||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
|
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
|
||||||
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
|
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"ansi-styles": "^3.2.1",
|
"ansi-styles": "^3.2.1",
|
||||||
"escape-string-regexp": "^1.0.5",
|
"escape-string-regexp": "^1.0.5",
|
||||||
@ -7530,6 +7566,7 @@
|
|||||||
"version": "7.0.1",
|
"version": "7.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
||||||
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
|
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"to-regex-range": "^5.0.1"
|
"to-regex-range": "^5.0.1"
|
||||||
}
|
}
|
||||||
@ -7537,12 +7574,14 @@
|
|||||||
"is-number": {
|
"is-number": {
|
||||||
"version": "7.0.0",
|
"version": "7.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
||||||
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
|
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"micromatch": {
|
"micromatch": {
|
||||||
"version": "4.0.2",
|
"version": "4.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
|
||||||
"integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
|
"integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"braces": "^3.0.1",
|
"braces": "^3.0.1",
|
||||||
"picomatch": "^2.0.5"
|
"picomatch": "^2.0.5"
|
||||||
@ -7551,12 +7590,14 @@
|
|||||||
"semver": {
|
"semver": {
|
||||||
"version": "6.3.0",
|
"version": "6.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
|
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"supports-color": {
|
"supports-color": {
|
||||||
"version": "5.5.0",
|
"version": "5.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
|
||||||
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"has-flag": "^3.0.0"
|
"has-flag": "^3.0.0"
|
||||||
}
|
}
|
||||||
@ -7565,6 +7606,7 @@
|
|||||||
"version": "5.0.1",
|
"version": "5.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
||||||
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
|
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
|
||||||
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"is-number": "^7.0.0"
|
"is-number": "^7.0.0"
|
||||||
}
|
}
|
||||||
@ -7828,7 +7870,8 @@
|
|||||||
"util-deprecate": {
|
"util-deprecate": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
|
||||||
|
"dev": true
|
||||||
},
|
},
|
||||||
"util.promisify": {
|
"util.promisify": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
@ -48,8 +48,9 @@
|
|||||||
"ts-loader": "^7.0.2"
|
"ts-loader": "^7.0.2"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@lourenci/react-kanban": "^0.15.0",
|
"@lourenci/react-kanban": "^2.0.0",
|
||||||
"bulma": "^0.7.2",
|
"bulma": "^0.7.2",
|
||||||
|
"bulma-switch": "^2.0.0",
|
||||||
"react": "^16.12.0",
|
"react": "^16.12.0",
|
||||||
"react-dom": "^16.12.0",
|
"react-dom": "^16.12.0",
|
||||||
"react-redux": "^7.1.3",
|
"react-redux": "^7.1.3",
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import React from 'react';
|
import React, { Fragment } from 'react';
|
||||||
import { Page } from '../Page';
|
import { Page } from '../Page';
|
||||||
import { connect, DispatchProp } from 'react-redux';
|
import { connect, DispatchProp } from 'react-redux';
|
||||||
import Board from '@lourenci/react-kanban';
|
import Board, { addColumn } from '@lourenci/react-kanban';
|
||||||
import { fetchBoards } from '../../store/actions/boards';
|
import { fetchBoards } from '../../store/actions/boards';
|
||||||
import { createIssue } from '../../store/actions/issues';
|
import { createIssue } from '../../store/actions/issues';
|
||||||
import { buildKanboard, moveCard } from '../../store/actions/kanboards';
|
import { buildKanboard, moveCard } from '../../store/actions/kanboards';
|
||||||
@ -13,6 +13,7 @@ export interface BoardPageProps extends DispatchProp {
|
|||||||
board: any
|
board: any
|
||||||
kanboard: any
|
kanboard: any
|
||||||
}
|
}
|
||||||
|
|
||||||
export class BoardPage extends React.Component<BoardPageProps> {
|
export class BoardPage extends React.Component<BoardPageProps> {
|
||||||
|
|
||||||
state = {
|
state = {
|
||||||
@ -22,7 +23,9 @@ export class BoardPage extends React.Component<BoardPageProps> {
|
|||||||
title: "",
|
title: "",
|
||||||
body: "",
|
body: "",
|
||||||
project: ""
|
project: ""
|
||||||
}
|
},
|
||||||
|
compactMode: true,
|
||||||
|
hasError: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
onNewCardTitleChange: (evt: any) => void;
|
onNewCardTitleChange: (evt: any) => void;
|
||||||
@ -40,41 +43,83 @@ export class BoardPage extends React.Component<BoardPageProps> {
|
|||||||
this.onNewCardSaveClick = this.onNewCardSaveClick.bind(this);
|
this.onNewCardSaveClick = this.onNewCardSaveClick.bind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
componentDidCatch(error, errorInfo) {
|
||||||
|
// You can also log the error to an error reporting service
|
||||||
|
console.error(error, errorInfo);
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { board } = this.props;
|
const { board } = this.props;
|
||||||
return (
|
return (
|
||||||
<Page title={`${board ? (board.title + ' - ') : ''}GenGitKan`}>
|
<Page title={`${board ? (board.title + ' - ') : ''}GenGitKan`}>
|
||||||
<div className="container is-fluid">
|
{this.renderBoard()}
|
||||||
{this.renderBoard()}
|
|
||||||
</div>
|
|
||||||
</Page>
|
</Page>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
renderBoard() {
|
renderBoard() {
|
||||||
const { kanboard } = this.props;
|
const { kanboard, board } = this.props;
|
||||||
|
|
||||||
if (!kanboard) {
|
if (!kanboard) {
|
||||||
return <Loader></Loader>
|
return <Loader></Loader>
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="kanboard-container is-fullheight">
|
<Fragment>
|
||||||
<Board disableLaneDrag={true}
|
<nav className="navbar is-light">
|
||||||
renderCard={this.renderCard}
|
<div className="container is-fluid">
|
||||||
renderLaneHeader={this.renderLaneHeader}
|
<div className="navbar-start">
|
||||||
onCardDragEnd={this.onCardDragEnd.bind(this)}>
|
<div className="navbar-item">
|
||||||
{kanboard}
|
{board.title}
|
||||||
</Board>
|
</div>
|
||||||
{ this.renderNewCardModal() }
|
</div>
|
||||||
</div>
|
<div className="navbar-end">
|
||||||
|
<div className="navbar-item">
|
||||||
|
|
||||||
|
<div className="field">
|
||||||
|
<input id="compactMode"
|
||||||
|
checked={this.state.compactMode}
|
||||||
|
onChange={this.onCompactModeChange.bind(this)}
|
||||||
|
type="checkbox"
|
||||||
|
className="switch is-outlined is-success"
|
||||||
|
name="compactMode"
|
||||||
|
/>
|
||||||
|
<label htmlFor="compactMode">Mode compact</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<a href={`#/boards/${board.id}/edit`} className="navbar-item">
|
||||||
|
<span className="icon">
|
||||||
|
<i className="fa fa-edit fa-fw"></i>
|
||||||
|
</span>
|
||||||
|
<span>Modifier le tableau</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div className="container is-fluid">
|
||||||
|
<div className="kanboard-container is-fullheight">
|
||||||
|
<Board
|
||||||
|
renderCard={this.renderCard.bind(this)}
|
||||||
|
renderColumnHeader={this.renderLaneHeader.bind(this)}
|
||||||
|
onCardDragEnd={this.onCardDragEnd.bind(this)}
|
||||||
|
disableColumnDrag={true}
|
||||||
|
>
|
||||||
|
{kanboard}
|
||||||
|
</Board>
|
||||||
|
{ this.renderNewCardModal() }
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Fragment>
|
||||||
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
renderNewCardModal() {
|
renderNewCardModal() {
|
||||||
const { newCardModalActive, newCardLaneID } = this.state;
|
const { newCardModalActive, newCardLaneID } = this.state;
|
||||||
const { board } = this.props;
|
const { board } = this.props;
|
||||||
if (!board || !newCardLaneID) return null;
|
|
||||||
|
if (!board || newCardLaneID === undefined) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Modal active={newCardModalActive}>
|
<Modal active={newCardModalActive}>
|
||||||
<div className="new-card-modal">
|
<div className="new-card-modal">
|
||||||
@ -139,7 +184,7 @@ export class BoardPage extends React.Component<BoardPageProps> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
renderCard(card: any) {
|
renderCard(card: any) {
|
||||||
return <IssueCard card={card} />;
|
return <IssueCard compact={this.state.compactMode} card={card} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
renderLaneHeader(lane: any) {
|
renderLaneHeader(lane: any) {
|
||||||
@ -147,28 +192,49 @@ export class BoardPage extends React.Component<BoardPageProps> {
|
|||||||
<div className="kanboard-lane">
|
<div className="kanboard-lane">
|
||||||
<div className="level">
|
<div className="level">
|
||||||
<div className="level-left">
|
<div className="level-left">
|
||||||
<h3 className="level-item is-size-3">{lane.title}</h3>
|
<div className="level-item">
|
||||||
|
<span className="tag is-primary is-light is-normal">{lane.cards.length}</span>
|
||||||
|
</div>
|
||||||
|
<button className="button is-light level-item is-small expand"
|
||||||
|
onClick={this.onMinimizeColumn}>
|
||||||
|
<span className="icon">
|
||||||
|
<i className="fas fa-chevron-right" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
<h3 className="level-item is-size-5">
|
||||||
|
{lane.title}
|
||||||
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
<div className="level-right">
|
<div className="level-right is-show-expand">
|
||||||
<button className="button is-light level-item is-medium"
|
<button className="button is-light level-item is-small"
|
||||||
onClick={this.onNewCardClick.bind(this, lane.id)}>
|
onClick={this.onNewCardClick.bind(this, lane.id)}>
|
||||||
<span className="icon">
|
<span className="icon">
|
||||||
<i className="fas fa-plus" aria-hidden="true"></i>
|
<i className="fas fa-plus" aria-hidden="true"></i>
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
|
<button className="button is-light level-item is-small"
|
||||||
|
onClick={this.onMinimizeColumn}>
|
||||||
|
<span className="icon">
|
||||||
|
<i className="fas fa-chevron-left" aria-hidden="true"></i>
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
onCardDragEnd(source: any, dest: any) {
|
onMinimizeColumn(e: any) {
|
||||||
|
e.currentTarget.closest('.react-kanban-column').classList.toggle('minimized');
|
||||||
|
}
|
||||||
|
|
||||||
|
onCardDragEnd(card: any, source: any, dest: any) {
|
||||||
const { board } = this.props;
|
const { board } = this.props;
|
||||||
this.props.dispatch(moveCard(
|
this.props.dispatch(moveCard(
|
||||||
board.id,
|
board.id,
|
||||||
source.fromLaneId,
|
source.fromColumnId,
|
||||||
source.fromPosition,
|
source.fromPosition,
|
||||||
dest.toLaneId,
|
dest.toColumnId,
|
||||||
dest.toPosition
|
dest.toPosition
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@ -239,6 +305,11 @@ export class BoardPage extends React.Component<BoardPageProps> {
|
|||||||
this.props.dispatch(buildKanboard(board));
|
this.props.dispatch(buildKanboard(board));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onCompactModeChange(evt: React.ChangeEvent) {
|
||||||
|
const checked = (evt.currentTarget as HTMLInputElement).checked;
|
||||||
|
this.setState(state => ({...state, compactMode: checked }));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const ConnectedBoardPage = connect(function(state: any, props: any) {
|
export const ConnectedBoardPage = connect(function(state: any, props: any) {
|
||||||
|
@ -1,50 +1,63 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
import { KanboardCard } from '../../types/kanboard';
|
||||||
|
|
||||||
export interface IssueCardProps {
|
export interface IssueCardProps {
|
||||||
card: any
|
card: KanboardCard
|
||||||
|
compact: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export class IssueCard extends React.PureComponent<IssueCardProps> {
|
export class IssueCard extends React.PureComponent<IssueCardProps> {
|
||||||
render() {
|
render() {
|
||||||
const { card } = this.props;
|
|
||||||
|
const { card, compact } = this.props;
|
||||||
const issueURLInfo = extractInfoFromIssueURL(card.issue.url);
|
const issueURLInfo = extractInfoFromIssueURL(card.issue.url);
|
||||||
const projectURL = `${issueURLInfo.baseURL}/${issueURLInfo.owner}/${issueURLInfo.projectName}`;
|
const projectURL = `${issueURLInfo.baseURL}/${issueURLInfo.owner}/${issueURLInfo.projectName}`;
|
||||||
const issueURL = `${projectURL}/issues/${card.issue.number}`;
|
const issueURL = `${projectURL}/issues/${card.issue.number}`;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="kanboard-card">
|
<div className="kanboard-card">
|
||||||
<div className="box">
|
<div className="box has-padding-small is-radiusless">
|
||||||
<div className="media">
|
<div className="media">
|
||||||
{
|
|
||||||
card.issue.assignee ?
|
|
||||||
<div className="media-left">
|
|
||||||
<figure className="image is-64x64">
|
|
||||||
<img src={card.issue.assignee.avatar_url} alt="Image" />
|
|
||||||
</figure>
|
|
||||||
<small>{`@${card.issue.assignee.login}`}</small>
|
|
||||||
</div>
|
|
||||||
: null
|
|
||||||
}
|
|
||||||
<div className="media-content">
|
<div className="media-content">
|
||||||
<div className="content">
|
<div className="content">
|
||||||
<p>
|
{ !compact &&
|
||||||
<strong>{`#${card.issue.number}`}</strong>
|
<nav className="level">
|
||||||
{ card.issue.milestone ? <small>{`- ${card.issue.milestone.title}`}</small> : null }
|
<div className="level-left">
|
||||||
<br />
|
<div className="level-item">
|
||||||
<span className="is-size-6">{card.issue.title}</span>
|
<a target="_blank" href={issueURL}><strong>{`#${card.issue.number}`}</strong></a>
|
||||||
</p>
|
</div>
|
||||||
|
{ !compact &&
|
||||||
|
<div className="level-item">
|
||||||
|
<a target="_blank" href={projectURL}>{card.project}</a>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
<div className="level-right">
|
||||||
|
{
|
||||||
|
card.issue.assignee && !compact ?
|
||||||
|
<div className="level-item">
|
||||||
|
<small>{`@${card.issue.assignee.login}`}</small>
|
||||||
|
</div>
|
||||||
|
: null
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
}
|
||||||
|
{ compact &&
|
||||||
|
<a target="_blank" className="mr-1" href={issueURL}><strong>{`#${card.issue.number}`}</strong></a>
|
||||||
|
}
|
||||||
|
<span>{card.issue.title ? card.issue.title : ''}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{ !compact &&
|
||||||
</div>
|
<nav className="level">
|
||||||
<div className="level is-mobile" style={{marginTop:'1rem'}}>
|
<div className="level-left"></div>
|
||||||
<div className="level-left">
|
<div className="level-right">
|
||||||
<small className="level-item"><a href={projectURL}>{card.project}</a></small>
|
<div className="level-item is-size-7">
|
||||||
</div>
|
{card.issue.milestone ? card.issue.milestone.title : ''}
|
||||||
<div className="level-right">
|
</div>
|
||||||
<a className="level-item" target="_blank" href={issueURL}>
|
</div>
|
||||||
<span className="icon is-small has-text-info">
|
</nav>
|
||||||
<i className="fas fa-search" aria-hidden="true"></i>
|
}
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
@import 'bulma/bulma.sass';
|
@import 'bulma/bulma.sass';
|
||||||
|
@import '../../node_modules/@lourenci/react-kanban/dist/styles.css';
|
||||||
|
@import 'bulma-switch/dist/css/bulma-switch.sass';
|
||||||
@import '_base.scss';
|
@import '_base.scss';
|
||||||
@import '_loader.scss';
|
@import '_loader.scss';
|
||||||
@import '_kanboard.scss';
|
@import '_kanboard.scss';
|
||||||
|
@ -11,7 +11,15 @@ html, body {
|
|||||||
margin-top: $size-normal;
|
margin-top: $size-normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.has-padding-small {
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
#app {
|
#app {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mr-1 {
|
||||||
|
margin-right: 5px;
|
||||||
}
|
}
|
@ -44,6 +44,12 @@
|
|||||||
|
|
||||||
.kanboard-lane {
|
.kanboard-lane {
|
||||||
margin-bottom: $size-small;
|
margin-bottom: $size-small;
|
||||||
|
background: $white;
|
||||||
|
top: 0;
|
||||||
|
|
||||||
|
.expand {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,4 +57,142 @@
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
width: 50% !important;
|
width: 50% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.react-kanban-board {
|
||||||
|
max-height: calc(100vh - calc(52px * 2));
|
||||||
|
overflow: hidden;
|
||||||
|
overflow-x: scroll;
|
||||||
|
|
||||||
|
scrollbar-color: $grey-lighter, #f1f1f1;
|
||||||
|
scrollbar-width: 5px;
|
||||||
|
|
||||||
|
&::-webkit-scrollbar {
|
||||||
|
width: 5px;
|
||||||
|
height: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Track */
|
||||||
|
&::-webkit-scrollbar-track {
|
||||||
|
background: #f1f1f1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle */
|
||||||
|
&::-webkit-scrollbar-thumb {
|
||||||
|
background: $grey-lighter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle on hover */
|
||||||
|
&::-webkit-scrollbar-thumb:hover {
|
||||||
|
background: $green;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.react-kanban-column {
|
||||||
|
transition: width ease .2s;
|
||||||
|
max-width: 305px;
|
||||||
|
min-width: 305px;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
max-height: 100%;
|
||||||
|
overflow-x: hidden;
|
||||||
|
overflow-y: scroll;
|
||||||
|
|
||||||
|
scrollbar-color: $grey-lighter, #f1f1f1;
|
||||||
|
scrollbar-width: 5px;
|
||||||
|
|
||||||
|
.kanboard-card {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.minimized {
|
||||||
|
max-width: 70px;
|
||||||
|
min-width: 70px;
|
||||||
|
|
||||||
|
writing-mode: vertical-rl;
|
||||||
|
text-orientation: sideways-right;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.level-item {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.level-left {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.level-right.is-show-expand {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kanboard-lane {
|
||||||
|
/*margin-right: -1em;*/
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
margin-top: .5em;
|
||||||
|
/*margin-right: -.5em;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag {
|
||||||
|
writing-mode: horizontal-tb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.expand {
|
||||||
|
display: block !important;
|
||||||
|
margin-top: .5em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.kanboard-card {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
&::-webkit-scrollbar {
|
||||||
|
width: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Track */
|
||||||
|
&::-webkit-scrollbar-track {
|
||||||
|
background: #f1f1f1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle */
|
||||||
|
&::-webkit-scrollbar-thumb {
|
||||||
|
background: $grey-lighter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle on hover */
|
||||||
|
&::-webkit-scrollbar-thumb:hover {
|
||||||
|
background: $green;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.react-kanban-card__title {
|
||||||
|
position: sticky;
|
||||||
|
position: -webkit-sticky;
|
||||||
|
}
|
||||||
|
|
||||||
|
.react-kanban-column {
|
||||||
|
background: white !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.kanboard-card {
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
|
||||||
|
a {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.level {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.level-item {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
}
|
}
|
@ -37,22 +37,22 @@ function handleMoveCard(state: any, action: any) {
|
|||||||
|
|
||||||
const kanboard = state.byID[boardID];
|
const kanboard = state.byID[boardID];
|
||||||
|
|
||||||
const lanes = [ ...kanboard.lanes ];
|
const columns = [ ...kanboard.columns ];
|
||||||
const fromLane = lanes[fromLaneID];
|
const fromLane = columns[fromLaneID];
|
||||||
const toLane = lanes[toLaneID];
|
const toLane = columns[toLaneID];
|
||||||
const card = fromLane.cards[fromPosition];
|
const card = fromLane.cards[fromPosition];
|
||||||
|
|
||||||
const fromCards = [ ...fromLane.cards ];
|
const fromCards = [ ...fromLane.cards ];
|
||||||
if (fromLaneID !== toLaneID) {
|
if (fromLaneID !== toLaneID) {
|
||||||
fromCards.splice(fromPosition, 1);
|
fromCards.splice(fromPosition, 1);
|
||||||
lanes[fromLaneID] = {
|
columns[fromLaneID] = {
|
||||||
...fromLane,
|
...fromLane,
|
||||||
cards: fromCards,
|
cards: fromCards,
|
||||||
};
|
};
|
||||||
|
|
||||||
const toCards = [ ...toLane.cards ];
|
const toCards = [ ...toLane.cards ];
|
||||||
toCards.splice(toPosition, 0, card);
|
toCards.splice(toPosition, 0, card);
|
||||||
lanes[toLaneID] = {
|
columns[toLaneID] = {
|
||||||
...toLane,
|
...toLane,
|
||||||
cards: toCards,
|
cards: toCards,
|
||||||
};
|
};
|
||||||
@ -67,7 +67,7 @@ function handleMoveCard(state: any, action: any) {
|
|||||||
...state.byID,
|
...state.byID,
|
||||||
[boardID]: {
|
[boardID]: {
|
||||||
...state.byID[boardID],
|
...state.byID[boardID],
|
||||||
lanes,
|
columns,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import { GiteaUnauthorizedError } from "../../util/gitea";
|
import { GiteaUnauthorizedError } from "../../util/gitea";
|
||||||
import { put } from 'redux-saga/effects';
|
import { put } from 'redux-saga/effects';
|
||||||
import { logout } from '../actions/logout';
|
import { logout } from '../actions/logout';
|
||||||
|
import { saveReferer } from "../../util/referer";
|
||||||
|
|
||||||
export function* failuresSaga(action) {
|
export function* failuresSaga(action) {
|
||||||
const err = action.error;
|
if (action.error instanceof GiteaUnauthorizedError) {
|
||||||
if (err instanceof GiteaUnauthorizedError) {
|
saveReferer();
|
||||||
yield put(logout());
|
yield put(logout());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ export function* fetchIssuesSaga(action: any) {
|
|||||||
if (pageIssues.length === 0) {
|
if (pageIssues.length === 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
issues.push(...pageIssues);
|
issues.push(...pageIssues.filter(issue => issue.pull_request === null));
|
||||||
page++;
|
page++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,14 +76,9 @@ export function* createIssueSaga(action: any) {
|
|||||||
const labels = yield call(gitea.fetchProjectLabels.bind(gitea), project);
|
const labels = yield call(gitea.fetchProjectLabels.bind(gitea), project);
|
||||||
const giteaLabel = labels.find((l: any) => l.name === label)
|
const giteaLabel = labels.find((l: any) => l.name === label)
|
||||||
|
|
||||||
if (!giteaLabel) {
|
|
||||||
yield put({ type: CREATE_ISSUE_FAILURE, error: new Error(`Label "${label}" not found !`) });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let issue;
|
let issue;
|
||||||
try {
|
try {
|
||||||
issue = yield call(gitea.createIssue.bind(gitea), project, title, body, giteaLabel.id);
|
issue = yield call(gitea.createIssue.bind(gitea), project, title, body, giteaLabel ? giteaLabel.id : null);
|
||||||
} catch(error) {
|
} catch(error) {
|
||||||
yield put({ type: CREATE_ISSUE_FAILURE, error });
|
yield put({ type: CREATE_ISSUE_FAILURE, error });
|
||||||
return;
|
return;
|
||||||
|
@ -22,7 +22,7 @@ export function* moveCardSaga(action: any) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const toLane = kanboard.lanes[toLaneID];
|
const toLane = kanboard.columns[toLaneID];
|
||||||
const card = toLane.cards[toPosition];
|
const card = toLane.cards[toPosition];
|
||||||
|
|
||||||
if (!card) return;
|
if (!card) return;
|
||||||
@ -75,13 +75,13 @@ function createCards(projects: Project[], issues: any, lane: BoardLane, rest: Se
|
|||||||
return projectIssues.reduce((projectCards: KanboardCard[], issue: any) => {
|
return projectIssues.reduce((projectCards: KanboardCard[], issue: any) => {
|
||||||
|
|
||||||
const hasLabel = issue.labels.some((l: any) => l.name === lane.issueLabel);
|
const hasLabel = issue.labels.some((l: any) => l.name === lane.issueLabel);
|
||||||
const card = getMemoizedKanboardCard(issue.id, issue.title, p, issue);
|
const { card, memoized } = getMemoizedKanboardCard(issue.id, issue.title, p, issue);
|
||||||
|
|
||||||
if (hasLabel) {
|
if (hasLabel) {
|
||||||
projectCards.push(card);
|
projectCards.push(card);
|
||||||
rest.delete(card);
|
rest.delete(card);
|
||||||
} else {
|
} else {
|
||||||
rest.add(card);
|
if (!memoized) rest.add(card);
|
||||||
}
|
}
|
||||||
|
|
||||||
return projectCards;
|
return projectCards;
|
||||||
@ -95,11 +95,19 @@ function createCards(projects: Project[], issues: any, lane: BoardLane, rest: Se
|
|||||||
|
|
||||||
const kanboardCardMemo: {[key: string]: KanboardCard} = {};
|
const kanboardCardMemo: {[key: string]: KanboardCard} = {};
|
||||||
|
|
||||||
function getMemoizedKanboardCard(id: number, title: string, project: Project, issue: Issue): KanboardCard {
|
function getKanboardCardMemoizationKey(id: number, project: Project, issue: Issue) {
|
||||||
const key = `${project.id}-${issue.id}-${id}`;
|
return `${project.id}-${issue.id}-${id}`;
|
||||||
if (kanboardCardMemo.hasOwnProperty(key)) return kanboardCardMemo[key];
|
}
|
||||||
|
|
||||||
|
function isKanboardCardMemoized(key: string) {
|
||||||
|
return kanboardCardMemo.hasOwnProperty(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
function getMemoizedKanboardCard(id: number, title: string, project: Project, issue: Issue) {
|
||||||
|
const key = getKanboardCardMemoizationKey(id, project, issue);
|
||||||
|
if (isKanboardCardMemoized(key)) return { card: kanboardCardMemo[key], memoized: true };
|
||||||
kanboardCardMemo[key] = { id, title, project, issue };
|
kanboardCardMemo[key] = { id, title, project, issue };
|
||||||
return kanboardCardMemo[key];
|
return { card: kanboardCardMemo[key], memoized: false };
|
||||||
}
|
}
|
||||||
|
|
||||||
function resetKandboarCardMemo() {
|
function resetKandboarCardMemo() {
|
||||||
@ -137,7 +145,7 @@ function createKanboard(board: Board, issues: any) {
|
|||||||
|
|
||||||
const kanboard = {
|
const kanboard = {
|
||||||
id: board.id,
|
id: board.id,
|
||||||
lanes: createKanboardLanes(board, issues),
|
columns: createKanboardLanes(board, issues),
|
||||||
};
|
};
|
||||||
|
|
||||||
return kanboard;
|
return kanboard;
|
||||||
|
@ -3,10 +3,18 @@ import { FETCH_PROJECTS_SUCCESS, FETCH_PROJECTS_FAILURE } from '../actions/proje
|
|||||||
import { gitea } from '../../util/gitea';
|
import { gitea } from '../../util/gitea';
|
||||||
|
|
||||||
export function* fetchProjectsSaga() {
|
export function* fetchProjectsSaga() {
|
||||||
|
let projects = [];
|
||||||
let projects;
|
|
||||||
try {
|
try {
|
||||||
projects = yield call(gitea.fetchUserProjects.bind(gitea))
|
let page = 1;
|
||||||
|
while(true) {
|
||||||
|
let pageProjects = yield call(gitea.fetchUserProjects.bind(gitea), page);
|
||||||
|
if (pageProjects.length === 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
projects.push(...pageProjects);
|
||||||
|
page++;
|
||||||
|
}
|
||||||
|
|
||||||
} catch(error) {
|
} catch(error) {
|
||||||
yield put({ type: FETCH_PROJECTS_FAILURE, error });
|
yield put({ type: FETCH_PROJECTS_FAILURE, error });
|
||||||
return;
|
return;
|
||||||
|
9
client/src/store/sagas/referer.ts
Normal file
9
client/src/store/sagas/referer.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import { hasReferer, getReferer, clearReferer } from '../../util/referer';
|
||||||
|
|
||||||
|
export function* navigateToRefererSaga() {
|
||||||
|
if (!hasReferer()) return;
|
||||||
|
const referer = getReferer();
|
||||||
|
console.log("Redirecting to referer", referer);
|
||||||
|
clearReferer();
|
||||||
|
window.location.hash = referer;
|
||||||
|
}
|
@ -10,9 +10,11 @@ import { LOGOUT_REQUEST, LOGOUT_SUCCESS } from '../actions/logout';
|
|||||||
import { logoutSaga, logoutSuccessSaga } from './logout';
|
import { logoutSaga, logoutSuccessSaga } from './logout';
|
||||||
import { BUILD_KANBOARD_REQUEST, MOVE_CARD } from '../actions/kanboards';
|
import { BUILD_KANBOARD_REQUEST, MOVE_CARD } from '../actions/kanboards';
|
||||||
import { buildKanboardSaga, moveCardSaga, refreshKanboardSaga } from './kanboards';
|
import { buildKanboardSaga, moveCardSaga, refreshKanboardSaga } from './kanboards';
|
||||||
|
import { navigateToRefererSaga } from './referer';
|
||||||
|
|
||||||
export function* rootSaga() {
|
export function* rootSaga() {
|
||||||
yield all([
|
yield all([
|
||||||
|
navigateToRefererSaga(),
|
||||||
takeEvery(patternFromRegExp(/^.*_FAILURE/), failuresSaga),
|
takeEvery(patternFromRegExp(/^.*_FAILURE/), failuresSaga),
|
||||||
takeLatest(FETCH_BOARDS_REQUEST, fetchBoardsSaga),
|
takeLatest(FETCH_BOARDS_REQUEST, fetchBoardsSaga),
|
||||||
takeLatest(BUILD_KANBOARD_REQUEST, buildKanboardSaga),
|
takeLatest(BUILD_KANBOARD_REQUEST, buildKanboardSaga),
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { createStore, applyMiddleware } from 'redux'
|
import { createStore, applyMiddleware, compose } from 'redux'
|
||||||
import createSagaMiddleware from 'redux-saga'
|
import createSagaMiddleware from 'redux-saga'
|
||||||
import { rootReducer } from './reducers/root'
|
import { rootReducer } from './reducers/root'
|
||||||
import { rootSaga } from './sagas/root'
|
import { rootSaga } from './sagas/root'
|
||||||
@ -14,6 +14,8 @@ if (process.env.NODE_ENV !== 'production') {
|
|||||||
reduxMiddlewares.push(loggerMiddleware);
|
reduxMiddlewares.push(loggerMiddleware);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const composeEnhancers = (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
|
||||||
|
|
||||||
// create the saga middleware
|
// create the saga middleware
|
||||||
const sagaMiddleware = createSagaMiddleware()
|
const sagaMiddleware = createSagaMiddleware()
|
||||||
reduxMiddlewares.push(sagaMiddleware);
|
reduxMiddlewares.push(sagaMiddleware);
|
||||||
@ -21,7 +23,7 @@ reduxMiddlewares.push(sagaMiddleware);
|
|||||||
// mount it on the Store
|
// mount it on the Store
|
||||||
export const store = createStore(
|
export const store = createStore(
|
||||||
rootReducer,
|
rootReducer,
|
||||||
applyMiddleware(...reduxMiddlewares)
|
composeEnhancers(applyMiddleware(...reduxMiddlewares)),
|
||||||
)
|
)
|
||||||
|
|
||||||
// then run the saga
|
// then run the saga
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
export class GiteaUnauthorizedError extends Error {
|
export class GiteaUnauthorizedError extends Error {
|
||||||
constructor(...args: any[]) {
|
constructor(...args: any[]) {
|
||||||
super(...args)
|
super(...args)
|
||||||
|
Object.setPrototypeOf(this, GiteaUnauthorizedError.prototype);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -15,8 +16,8 @@ export class GiteaClient {
|
|||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
fetchUserProjects() {
|
fetchUserProjects(page = 1) {
|
||||||
return fetch(`/gitea/api/v1/user/repos`)
|
return fetch(`/gitea/api/v1/user/repos?page=${page}`)
|
||||||
.then(this.assertAuthorization)
|
.then(this.assertAuthorization)
|
||||||
.then(this.assertOk)
|
.then(this.assertOk)
|
||||||
.then(res => res.json())
|
.then(res => res.json())
|
||||||
@ -61,7 +62,7 @@ export class GiteaClient {
|
|||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
title,
|
title,
|
||||||
body,
|
body,
|
||||||
labels: [labelID],
|
labels: labelID ? [labelID] : undefined,
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
.then(this.assertAuthorization)
|
.then(this.assertAuthorization)
|
||||||
|
19
client/src/util/referer.ts
Normal file
19
client/src/util/referer.ts
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
const localStorage = window.localStorage;
|
||||||
|
const refererKey = 'referer';
|
||||||
|
|
||||||
|
export function getReferer() {
|
||||||
|
return localStorage.getItem(refererKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function saveReferer() {
|
||||||
|
console.log("Saving referer", window.location.hash);
|
||||||
|
localStorage.setItem(refererKey, window.location.hash);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function hasReferer() {
|
||||||
|
return !!getReferer();
|
||||||
|
}
|
||||||
|
|
||||||
|
export function clearReferer() {
|
||||||
|
localStorage.removeItem(refererKey);
|
||||||
|
}
|
@ -19,7 +19,7 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
module: {
|
module: {
|
||||||
rules: [{
|
rules: [{
|
||||||
test: /\.scss$/,
|
test: /\.s(a|c)ss$/,
|
||||||
use: [
|
use: [
|
||||||
MiniCssExtractPlugin.loader,
|
MiniCssExtractPlugin.loader,
|
||||||
{
|
{
|
||||||
|
@ -28,7 +28,7 @@ func getServiceContainer(conf *config.Config) (*service.Container, error) {
|
|||||||
|
|
||||||
ctn.Provide(
|
ctn.Provide(
|
||||||
session.ServiceName,
|
session.ServiceName,
|
||||||
gorilla.ServiceProvider("gitea-kan", cookieStore),
|
gorilla.ServiceProvider("gengitkan", cookieStore),
|
||||||
)
|
)
|
||||||
|
|
||||||
// Create and expose config service provider
|
// Create and expose config service provider
|
||||||
|
1
debian/compat
vendored
1
debian/compat
vendored
@ -1 +0,0 @@
|
|||||||
9
|
|
14
debian/control
vendored
14
debian/control
vendored
@ -1,14 +0,0 @@
|
|||||||
Source: gitea-kan
|
|
||||||
Section: unknown
|
|
||||||
Priority: optional
|
|
||||||
Maintainer: William Petit <wpetit@cadoles.com>
|
|
||||||
Build-Depends: debhelper (>= 8.0.0), wget, ca-certificates, tar
|
|
||||||
Standards-Version: 3.9.4
|
|
||||||
Homepage: http://forge.cadoles.com/wpetit/gitea-kan
|
|
||||||
Vcs-Git: http://forge.cadoles.com/wpetit/gitea-kan.git
|
|
||||||
Vcs-Browser: http://forge.cadoles.com/wpetit/gitea-kan
|
|
||||||
|
|
||||||
Package: gitea-kan
|
|
||||||
Architecture: amd64
|
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
|
||||||
Description: Application type "Kanboard" connectée à Gitea
|
|
1
debian/gitea-kan.dirs
vendored
1
debian/gitea-kan.dirs
vendored
@ -1 +0,0 @@
|
|||||||
var/lib/gitea-kan
|
|
13
debian/gitea-kan.service
vendored
13
debian/gitea-kan.service
vendored
@ -1,13 +0,0 @@
|
|||||||
[Unit]
|
|
||||||
Description=Application type "Kanboard" connectée à Gitea
|
|
||||||
After=network-online.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
Environment=GITEAKAN_HTTP_PUBDIR=/usr/share/gitea-kan/public
|
|
||||||
Environment=GITEAKAN_DATA_DBPATH=/var/lib/gitea-kan/data.db
|
|
||||||
ExecStart=/usr/bin/gitea-kan -workdir /usr/share/gitea-kan -config /etc/gitea-kan/server.conf
|
|
||||||
Restart=on-failure
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
54
debian/rules
vendored
54
debian/rules
vendored
@ -1,54 +0,0 @@
|
|||||||
#!/usr/bin/make -f
|
|
||||||
# -*- makefile -*-
|
|
||||||
|
|
||||||
# Uncomment this to turn on verbose mode.
|
|
||||||
export DH_VERBOSE=1
|
|
||||||
|
|
||||||
GO_VERSION := 1.13.5
|
|
||||||
OS := linux
|
|
||||||
ARCH := amd64
|
|
||||||
GOPATH=$(HOME)/go
|
|
||||||
|
|
||||||
ifeq (, $(shell which go 2>/dev/null))
|
|
||||||
override_dh_auto_build: install-go
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq (, $(shell which node 2>/dev/null))
|
|
||||||
override_dh_auto_build: install-nodejs
|
|
||||||
endif
|
|
||||||
|
|
||||||
%:
|
|
||||||
dh $@ --with systemd
|
|
||||||
|
|
||||||
override_dh_auto_build: $(GOPATH)
|
|
||||||
cd client && npm install
|
|
||||||
GOPATH=$(GOPATH) PATH="$(PATH):/usr/local/go/bin:$(GOPATH)/bin" go mod vendor
|
|
||||||
GOPATH=$(GOPATH) PATH="$(PATH):/usr/local/go/bin:$(GOPATH)/bin" ARCH_TARGETS=$(ARCH) make release
|
|
||||||
|
|
||||||
$(GOPATH):
|
|
||||||
mkdir -p $(GOPATH)
|
|
||||||
|
|
||||||
install-go:
|
|
||||||
wget https://dl.google.com/go/go$(GO_VERSION).$(OS)-$(ARCH).tar.gz
|
|
||||||
tar -C /usr/local -xzf go$(GO_VERSION).$(OS)-$(ARCH).tar.gz
|
|
||||||
|
|
||||||
install-nodejs:
|
|
||||||
wget -O- https://deb.nodesource.com/setup_12.x | bash -
|
|
||||||
apt-get install -y nodejs
|
|
||||||
|
|
||||||
override_dh_auto_install:
|
|
||||||
|
|
||||||
mkdir -p debian/gitea-kan/usr/share/gitea-kan
|
|
||||||
mkdir -p debian/gitea-kan/etc/gitea-kan
|
|
||||||
mkdir -p debian/gitea-kan/usr/bin
|
|
||||||
|
|
||||||
cp -r release/server-$(OS)-$(ARCH)/* debian/gitea-kan/usr/share/gitea-kan/
|
|
||||||
|
|
||||||
mv debian/gitea-kan/usr/share/gitea-kan/bin/server debian/gitea-kan/usr/bin/gitea-kan
|
|
||||||
mv debian/gitea-kan/usr/share/gitea-kan/server.conf debian/gitea-kan/etc/gitea-kan/server.conf
|
|
||||||
|
|
||||||
install -d debian/gitea-kan
|
|
||||||
|
|
||||||
override_dh_strip:
|
|
||||||
|
|
||||||
override_dh_auto_test:
|
|
1
debian/source/format
vendored
1
debian/source/format
vendored
@ -1 +0,0 @@
|
|||||||
3.0 (native)
|
|
Loading…
x
Reference in New Issue
Block a user