mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 10:28:27 +00:00
Merge pull request #1422 from eikek/improve-item-selection
Improve item selection
This commit is contained in:
@ -26,7 +26,8 @@ case class CookieData(auth: AuthToken) {
|
|||||||
domain = None,
|
domain = None,
|
||||||
path = Some(path.asString),
|
path = Some(path.asString),
|
||||||
httpOnly = true,
|
httpOnly = true,
|
||||||
secure = sec
|
secure = sec,
|
||||||
|
sameSite = Some(SameSite.Strict)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,7 +24,8 @@ case class RememberCookieData(token: RememberToken) {
|
|||||||
path = Some(path.asString),
|
path = Some(path.asString),
|
||||||
httpOnly = true,
|
httpOnly = true,
|
||||||
secure = sec,
|
secure = sec,
|
||||||
maxAge = Some(config.valid.seconds)
|
maxAge = Some(config.valid.seconds),
|
||||||
|
sameSite = Some(SameSite.Strict)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,8 @@ final case class ShareCookieData(token: ShareToken) {
|
|||||||
httpOnly = true,
|
httpOnly = true,
|
||||||
secure = sec,
|
secure = sec,
|
||||||
maxAge = None,
|
maxAge = None,
|
||||||
expires = None
|
expires = None,
|
||||||
|
sameSite = Some(SameSite.Strict)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
307
modules/webapp/package-lock.json
generated
307
modules/webapp/package-lock.json
generated
@ -425,57 +425,57 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"cssnano": {
|
"cssnano": {
|
||||||
"version": "5.0.16",
|
"version": "5.0.17",
|
||||||
"resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.16.tgz",
|
"resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.17.tgz",
|
||||||
"integrity": "sha512-ryhRI9/B9VFCwPbb1z60LLK5/ldoExi7nwdnJzpkLZkm2/r7j2X3jfY+ZvDVJhC/0fPZlrAguYdHNFg0iglPKQ==",
|
"integrity": "sha512-fmjLP7k8kL18xSspeXTzRhaFtRI7DL9b8IcXR80JgtnWBpvAzHT7sCR/6qdn0tnxIaINUN6OEQu83wF57Gs3Xw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"cssnano-preset-default": "^5.1.11",
|
"cssnano-preset-default": "^5.1.12",
|
||||||
"lilconfig": "^2.0.3",
|
"lilconfig": "^2.0.3",
|
||||||
"yaml": "^1.10.2"
|
"yaml": "^1.10.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cssnano-preset-default": {
|
"cssnano-preset-default": {
|
||||||
"version": "5.1.11",
|
"version": "5.1.12",
|
||||||
"resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.11.tgz",
|
"resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.12.tgz",
|
||||||
"integrity": "sha512-ETet5hqHxmzQq2ynXMOQofKuLm7VOjMiOB7E2zdtm/hSeCKlD9fabzIUV4GoPcRyJRHi+4kGf0vsfGYbQ4nmPw==",
|
"integrity": "sha512-rO/JZYyjW1QNkWBxMGV28DW7d98UDLaF759frhli58QFehZ+D/LSmwQ2z/ylBAe2hUlsIWTq6NYGfQPq65EF9w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"css-declaration-sorter": "^6.0.3",
|
"css-declaration-sorter": "^6.0.3",
|
||||||
"cssnano-utils": "^3.0.1",
|
"cssnano-utils": "^3.0.2",
|
||||||
"postcss-calc": "^8.2.0",
|
"postcss-calc": "^8.2.0",
|
||||||
"postcss-colormin": "^5.2.4",
|
"postcss-colormin": "^5.2.5",
|
||||||
"postcss-convert-values": "^5.0.3",
|
"postcss-convert-values": "^5.0.4",
|
||||||
"postcss-discard-comments": "^5.0.2",
|
"postcss-discard-comments": "^5.0.3",
|
||||||
"postcss-discard-duplicates": "^5.0.2",
|
"postcss-discard-duplicates": "^5.0.3",
|
||||||
"postcss-discard-empty": "^5.0.2",
|
"postcss-discard-empty": "^5.0.3",
|
||||||
"postcss-discard-overridden": "^5.0.3",
|
"postcss-discard-overridden": "^5.0.4",
|
||||||
"postcss-merge-longhand": "^5.0.5",
|
"postcss-merge-longhand": "^5.0.6",
|
||||||
"postcss-merge-rules": "^5.0.5",
|
"postcss-merge-rules": "^5.0.6",
|
||||||
"postcss-minify-font-values": "^5.0.3",
|
"postcss-minify-font-values": "^5.0.4",
|
||||||
"postcss-minify-gradients": "^5.0.5",
|
"postcss-minify-gradients": "^5.0.6",
|
||||||
"postcss-minify-params": "^5.0.4",
|
"postcss-minify-params": "^5.0.5",
|
||||||
"postcss-minify-selectors": "^5.1.2",
|
"postcss-minify-selectors": "^5.1.3",
|
||||||
"postcss-normalize-charset": "^5.0.2",
|
"postcss-normalize-charset": "^5.0.3",
|
||||||
"postcss-normalize-display-values": "^5.0.2",
|
"postcss-normalize-display-values": "^5.0.3",
|
||||||
"postcss-normalize-positions": "^5.0.3",
|
"postcss-normalize-positions": "^5.0.4",
|
||||||
"postcss-normalize-repeat-style": "^5.0.3",
|
"postcss-normalize-repeat-style": "^5.0.4",
|
||||||
"postcss-normalize-string": "^5.0.3",
|
"postcss-normalize-string": "^5.0.4",
|
||||||
"postcss-normalize-timing-functions": "^5.0.2",
|
"postcss-normalize-timing-functions": "^5.0.3",
|
||||||
"postcss-normalize-unicode": "^5.0.3",
|
"postcss-normalize-unicode": "^5.0.4",
|
||||||
"postcss-normalize-url": "^5.0.4",
|
"postcss-normalize-url": "^5.0.5",
|
||||||
"postcss-normalize-whitespace": "^5.0.3",
|
"postcss-normalize-whitespace": "^5.0.4",
|
||||||
"postcss-ordered-values": "^5.0.4",
|
"postcss-ordered-values": "^5.0.5",
|
||||||
"postcss-reduce-initial": "^5.0.2",
|
"postcss-reduce-initial": "^5.0.3",
|
||||||
"postcss-reduce-transforms": "^5.0.3",
|
"postcss-reduce-transforms": "^5.0.4",
|
||||||
"postcss-svgo": "^5.0.3",
|
"postcss-svgo": "^5.0.4",
|
||||||
"postcss-unique-selectors": "^5.0.3"
|
"postcss-unique-selectors": "^5.0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cssnano-utils": {
|
"cssnano-utils": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.2.tgz",
|
||||||
"integrity": "sha512-VNCHL364lh++/ono+S3j9NlUK+d97KNkxI77NlqZU2W3xd2/qmyN61dsa47pTpb55zuU4G4lI7qFjAXZJH1OAQ==",
|
"integrity": "sha512-KhprijuQv2sP4kT92sSQwhlK3SJTbDIsxcfIEySB0O+3m9esFOai7dP9bMx5enHAh2MwarVIcnwiWoOm01RIbQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"csso": {
|
"csso": {
|
||||||
@ -979,9 +979,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"nanoid": {
|
"nanoid": {
|
||||||
"version": "3.2.0",
|
"version": "3.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz",
|
||||||
"integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
|
"integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node-releases": {
|
"node-releases": {
|
||||||
@ -1090,24 +1090,42 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"postcss": {
|
"postcss": {
|
||||||
"version": "8.4.6",
|
"version": "8.4.7",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.7.tgz",
|
||||||
"integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==",
|
"integrity": "sha512-L9Ye3r6hkkCeOETQX6iOaWZgjp3LL6Lpqm6EtgbKrgqGGteRMNb9vzBfRL96YOSu8o7x3MfIH9Mo5cPJFGrW6A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"nanoid": "^3.2.0",
|
"nanoid": "^3.3.1",
|
||||||
"picocolors": "^1.0.0",
|
"picocolors": "^1.0.0",
|
||||||
"source-map-js": "^1.0.2"
|
"source-map-js": "^1.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-calc": {
|
"postcss-calc": {
|
||||||
"version": "8.2.3",
|
"version": "8.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz",
|
||||||
"integrity": "sha512-EGM2EBBWqP57N0E7N7WOLT116PJ39dwHVU01WO4XPPQLJfkL2xVgkMZ+TZvCfapj/uJH07UEfKHQNPHzSw/14Q==",
|
"integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"postcss-selector-parser": "^6.0.2",
|
"postcss-selector-parser": "^6.0.9",
|
||||||
"postcss-value-parser": "^4.0.2"
|
"postcss-value-parser": "^4.2.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"postcss-selector-parser": {
|
||||||
|
"version": "6.0.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz",
|
||||||
|
"integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"cssesc": "^3.0.0",
|
||||||
|
"util-deprecate": "^1.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"postcss-value-parser": {
|
||||||
|
"version": "4.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
|
||||||
|
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-cli": {
|
"postcss-cli": {
|
||||||
@ -1131,9 +1149,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-colormin": {
|
"postcss-colormin": {
|
||||||
"version": "5.2.4",
|
"version": "5.2.5",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.4.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.5.tgz",
|
||||||
"integrity": "sha512-rYlC5015aNqVQt/B6Cy156g7sH5tRUJGmT9xeagYthtKehetbKx7jHxhyLpulP4bs4vbp8u/B2rac0J7S7qPQg==",
|
"integrity": "sha512-+X30aDaGYq81mFqwyPpnYInsZQnNpdxMX0ajlY7AExCexEFkPVV+KrO7kXwayqEWL2xwEbNQ4nUO0ZsRWGnevg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"browserslist": "^4.16.6",
|
"browserslist": "^4.16.6",
|
||||||
@ -1151,9 +1169,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-convert-values": {
|
"postcss-convert-values": {
|
||||||
"version": "5.0.3",
|
"version": "5.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.4.tgz",
|
||||||
"integrity": "sha512-fVkjHm2T0PSMqXUCIhHNWVGjhB9mHEWX2GboVs7j3iCgr6FpIl9c/IdXy0PHWZSQ9LFTRgmj98amxJE6KOnlsA==",
|
"integrity": "sha512-bugzSAyjIexdObovsPZu/sBCTHccImJxLyFgeV0MmNBm/Lw5h5XnjfML6gzEmJ3A6nyfCW7hb1JXzcsA4Zfbdw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"postcss-value-parser": "^4.2.0"
|
"postcss-value-parser": "^4.2.0"
|
||||||
@ -1168,27 +1186,27 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-discard-comments": {
|
"postcss-discard-comments": {
|
||||||
"version": "5.0.2",
|
"version": "5.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.3.tgz",
|
||||||
"integrity": "sha512-6VQ3pYTsJHEsN2Bic88Aa7J/Brn4Bv8j/rqaFQZkH+pcVkKYwxCIvoMQkykEW7fBjmofdTnQgcivt5CCBJhtrg==",
|
"integrity": "sha512-6W5BemziRoqIdAKT+1QjM4bNcJAQ7z7zk073730NHg4cUXh3/rQHHj7pmYxUB9aGhuRhBiUf0pXvIHkRwhQP0Q==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"postcss-discard-duplicates": {
|
"postcss-discard-duplicates": {
|
||||||
"version": "5.0.2",
|
"version": "5.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.3.tgz",
|
||||||
"integrity": "sha512-LKY81YjUjc78p6rbXIsnppsaFo8XzCoMZkXVILJU//sK0DgPkPSpuq/cZvHss3EtdKvWNYgWzQL+wiJFtEET4g==",
|
"integrity": "sha512-vPtm1Mf+kp7iAENTG7jI1MN1lk+fBqL5y+qxyi4v3H+lzsXEdfS3dwUZD45KVhgzDEgduur8ycB4hMegyMTeRw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"postcss-discard-empty": {
|
"postcss-discard-empty": {
|
||||||
"version": "5.0.2",
|
"version": "5.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.3.tgz",
|
||||||
"integrity": "sha512-SxBsbTjlsKUvZLL+dMrdWauuNZU8TBq5IOL/DHa6jBUSXFEwmDqeXRfTIK/FQpPTa8MJMxEHjSV3UbiuyLARPQ==",
|
"integrity": "sha512-xGJugpaXKakwKI7sSdZjUuN4V3zSzb2Y0LOlmTajFbNinEjTfVs9PFW2lmKBaC/E64WwYppfqLD03P8l9BuueA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"postcss-discard-overridden": {
|
"postcss-discard-overridden": {
|
||||||
"version": "5.0.3",
|
"version": "5.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.4.tgz",
|
||||||
"integrity": "sha512-yRTXknIZA4k8Yo4FiF1xbsLj/VBxfXEWxJNIrtIy6HC9KQ4xJxcPtoaaskh6QptCGrrcGnhKsTsENTRPZOBu4g==",
|
"integrity": "sha512-3j9QH0Qh1KkdxwiZOW82cId7zdwXVQv/gRXYDnwx5pBtR1sTkU4cXRK9lp5dSdiM0r0OICO/L8J6sV1/7m0kHg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"postcss-import": {
|
"postcss-import": {
|
||||||
@ -1223,13 +1241,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-merge-longhand": {
|
"postcss-merge-longhand": {
|
||||||
"version": "5.0.5",
|
"version": "5.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.6.tgz",
|
||||||
"integrity": "sha512-R2BCPJJ/U2oh1uTWEYn9CcJ7MMcQ1iIbj9wfr2s/zHu5om5MP/ewKdaunpfJqR1WYzqCsgnXuRoVXPAzxdqy8g==",
|
"integrity": "sha512-rkmoPwQO6ymJSmWsX6l2hHeEBQa7C4kJb9jyi5fZB1sE8nSCv7sqchoYPixRwX/yvLoZP2y6FA5kcjiByeJqDg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"postcss-value-parser": "^4.2.0",
|
"postcss-value-parser": "^4.2.0",
|
||||||
"stylehacks": "^5.0.2"
|
"stylehacks": "^5.0.3"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"postcss-value-parser": {
|
"postcss-value-parser": {
|
||||||
@ -1241,21 +1259,21 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-merge-rules": {
|
"postcss-merge-rules": {
|
||||||
"version": "5.0.5",
|
"version": "5.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.6.tgz",
|
||||||
"integrity": "sha512-3Oa26/Pb9VOFVksJjFG45SNoe4nhGvJ2Uc6TlRimqF8uhfOCEhVCaJ3rvEat5UFOn2UZqTY5Da8dFgCh3Iq0Ug==",
|
"integrity": "sha512-nzJWJ9yXWp8AOEpn/HFAW72WKVGD2bsLiAmgw4hDchSij27bt6TF+sIK0cJUBAYT3SGcjtGGsOR89bwkkMuMgQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"browserslist": "^4.16.6",
|
"browserslist": "^4.16.6",
|
||||||
"caniuse-api": "^3.0.0",
|
"caniuse-api": "^3.0.0",
|
||||||
"cssnano-utils": "^3.0.1",
|
"cssnano-utils": "^3.0.2",
|
||||||
"postcss-selector-parser": "^6.0.5"
|
"postcss-selector-parser": "^6.0.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-minify-font-values": {
|
"postcss-minify-font-values": {
|
||||||
"version": "5.0.3",
|
"version": "5.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.4.tgz",
|
||||||
"integrity": "sha512-bC45rVzEwsLhv/cL1eCjoo2OOjbSk9I7HKFBYnBvtyuIZlf7uMipMATXtA0Fc3jwPo3wuPIW1jRJWKzflMh1sA==",
|
"integrity": "sha512-RN6q3tyuEesvyCYYFCRGJ41J1XFvgV+dvYGHr0CeHv8F00yILlN8Slf4t8XW4IghlfZYCeyRrANO6HpJ948ieA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"postcss-value-parser": "^4.2.0"
|
"postcss-value-parser": "^4.2.0"
|
||||||
@ -1270,13 +1288,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-minify-gradients": {
|
"postcss-minify-gradients": {
|
||||||
"version": "5.0.5",
|
"version": "5.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.6.tgz",
|
||||||
"integrity": "sha512-/YjvXs8PepsoiZAIpjstOO4IHKwFAqYNqbA1yVdqklM84tbUUneh6omJxGlRlF3mi6K5Pa067Mg6IwqEnYC8Zg==",
|
"integrity": "sha512-E/dT6oVxB9nLGUTiY/rG5dX9taugv9cbLNTFad3dKxOO+BQg25Q/xo2z2ddG+ZB1CbkZYaVwx5blY8VC7R/43A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"colord": "^2.9.1",
|
"colord": "^2.9.1",
|
||||||
"cssnano-utils": "^3.0.1",
|
"cssnano-utils": "^3.0.2",
|
||||||
"postcss-value-parser": "^4.2.0"
|
"postcss-value-parser": "^4.2.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -1289,13 +1307,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-minify-params": {
|
"postcss-minify-params": {
|
||||||
"version": "5.0.4",
|
"version": "5.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.5.tgz",
|
||||||
"integrity": "sha512-Z0vjod9lRZEmEPfEmA2sCfjbfEEFKefMD3RDIQSUfXK4LpCyWkX1CniUgyNvnjJFLDPSxtgKzozhHhPHKoeGkg==",
|
"integrity": "sha512-YBNuq3Rz5LfLFNHb9wrvm6t859b8qIqfXsWeK7wROm3jSKNpO1Y5e8cOyBv6Acji15TgSrAwb3JkVNCqNyLvBg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"browserslist": "^4.16.6",
|
"browserslist": "^4.16.6",
|
||||||
"cssnano-utils": "^3.0.1",
|
"cssnano-utils": "^3.0.2",
|
||||||
"postcss-value-parser": "^4.2.0"
|
"postcss-value-parser": "^4.2.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -1308,9 +1326,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-minify-selectors": {
|
"postcss-minify-selectors": {
|
||||||
"version": "5.1.2",
|
"version": "5.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.3.tgz",
|
||||||
"integrity": "sha512-gpn1nJDMCf3g32y/7kl+jsdamhiYT+/zmEt57RoT9GmzlixBNRPohI7k8UIHelLABhdLf3MSZhtM33xuH5eQOQ==",
|
"integrity": "sha512-9RJfTiQEKA/kZhMaEXND893nBqmYQ8qYa/G+uPdVnXF6D/FzpfI6kwBtWEcHx5FqDbA79O9n6fQJfrIj6M8jvQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"postcss-selector-parser": "^6.0.5"
|
"postcss-selector-parser": "^6.0.5"
|
||||||
@ -1326,15 +1344,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-normalize-charset": {
|
"postcss-normalize-charset": {
|
||||||
"version": "5.0.2",
|
"version": "5.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.3.tgz",
|
||||||
"integrity": "sha512-fEMhYXzO8My+gC009qDc/3bgnFP8Fv1Ic8uw4ec4YTlhIOw63tGPk1YFd7fk9bZUf1DAbkhiL/QPWs9JLqdF2g==",
|
"integrity": "sha512-iKEplDBco9EfH7sx4ut7R2r/dwTnUqyfACf62Unc9UiyFuI7uUqZZtY+u+qp7g8Qszl/U28HIfcsI3pEABWFfA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"postcss-normalize-display-values": {
|
"postcss-normalize-display-values": {
|
||||||
"version": "5.0.2",
|
"version": "5.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.3.tgz",
|
||||||
"integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==",
|
"integrity": "sha512-FIV5FY/qs4Ja32jiDb5mVj5iWBlS3N8tFcw2yg98+8MkRgyhtnBgSC0lxU+16AMHbjX5fbSJgw5AXLMolonuRQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"postcss-value-parser": "^4.2.0"
|
"postcss-value-parser": "^4.2.0"
|
||||||
@ -1349,9 +1367,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-normalize-positions": {
|
"postcss-normalize-positions": {
|
||||||
"version": "5.0.3",
|
"version": "5.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.4.tgz",
|
||||||
"integrity": "sha512-U+rmhjrNBvIGYqr/1tD4wXPFFMKUbXsYXvlUCzLi0tOCUS6LoeEAnmVXXJY/MEB/1CKZZwBSs2tmzGawcygVBA==",
|
"integrity": "sha512-qynirjBX0Lc73ROomZE3lzzmXXTu48/QiEzKgMeqh28+MfuHLsuqC9po4kj84igZqqFGovz8F8hf44hA3dPYmQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"postcss-value-parser": "^4.2.0"
|
"postcss-value-parser": "^4.2.0"
|
||||||
@ -1366,9 +1384,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-normalize-repeat-style": {
|
"postcss-normalize-repeat-style": {
|
||||||
"version": "5.0.3",
|
"version": "5.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.4.tgz",
|
||||||
"integrity": "sha512-uk1+xYx0AMbA3nLSNhbDrqbf/rx+Iuq5tVad2VNyaxxJzx79oGieJ6D9F6AfOL2GtiIbP7vTYlpYHtG+ERFXTg==",
|
"integrity": "sha512-Innt+wctD7YpfeDR7r5Ik6krdyppyAg2HBRpX88fo5AYzC1Ut/l3xaxACG0KsbX49cO2n5EB13clPwuYVt8cMA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"postcss-value-parser": "^4.2.0"
|
"postcss-value-parser": "^4.2.0"
|
||||||
@ -1383,9 +1401,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-normalize-string": {
|
"postcss-normalize-string": {
|
||||||
"version": "5.0.3",
|
"version": "5.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.4.tgz",
|
||||||
"integrity": "sha512-Mf2V4JbIDboNGQhW6xW0YREDiYXoX3WrD3EjKkjvnpAJ6W4qqjLnK/c9aioyVFaWWHVdP5zVRw/9DI5S3oLDFw==",
|
"integrity": "sha512-Dfk42l0+A1CDnVpgE606ENvdmksttLynEqTQf5FL3XGQOyqxjbo25+pglCUvziicTxjtI2NLUR6KkxyUWEVubQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"postcss-value-parser": "^4.2.0"
|
"postcss-value-parser": "^4.2.0"
|
||||||
@ -1400,9 +1418,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-normalize-timing-functions": {
|
"postcss-normalize-timing-functions": {
|
||||||
"version": "5.0.2",
|
"version": "5.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.3.tgz",
|
||||||
"integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==",
|
"integrity": "sha512-QRfjvFh11moN4PYnJ7hia4uJXeFotyK3t2jjg8lM9mswleGsNw2Lm3I5wO+l4k1FzK96EFwEVn8X8Ojrp2gP4g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"postcss-value-parser": "^4.2.0"
|
"postcss-value-parser": "^4.2.0"
|
||||||
@ -1417,9 +1435,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-normalize-unicode": {
|
"postcss-normalize-unicode": {
|
||||||
"version": "5.0.3",
|
"version": "5.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.4.tgz",
|
||||||
"integrity": "sha512-uNC7BmS/7h6to2UWa4RFH8sOTzu2O9dVWPE/F9Vm9GdhONiD/c1kNaCLbmsFHlKWcEx7alNUChQ+jH/QAlqsQw==",
|
"integrity": "sha512-W79Regn+a+eXTzB+oV/8XJ33s3pDyFTND2yDuUCo0Xa3QSy1HtNIfRVPXNubHxjhlqmMFADr3FSCHT84ITW3ig==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"browserslist": "^4.16.6",
|
"browserslist": "^4.16.6",
|
||||||
@ -1435,9 +1453,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-normalize-url": {
|
"postcss-normalize-url": {
|
||||||
"version": "5.0.4",
|
"version": "5.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.5.tgz",
|
||||||
"integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==",
|
"integrity": "sha512-Ws3tX+PcekYlXh+ycAt0wyzqGthkvVtZ9SZLutMVvHARxcpu4o7vvXcNoiNKyjKuWecnjS6HDI3fjBuDr5MQxQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"normalize-url": "^6.0.1",
|
"normalize-url": "^6.0.1",
|
||||||
@ -1453,9 +1471,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-normalize-whitespace": {
|
"postcss-normalize-whitespace": {
|
||||||
"version": "5.0.3",
|
"version": "5.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.4.tgz",
|
||||||
"integrity": "sha512-333JWRnX655fSoUbufJ10HJop3c8mrpKkCCUnEmgz/Cb/QEtW+/TMZwDAUt4lnwqP6tCCk0x0b58jqvDgiQm/A==",
|
"integrity": "sha512-wsnuHolYZjMwWZJoTC9jeI2AcjA67v4UuidDrPN9RnX8KIZfE+r2Nd6XZRwHVwUiHmRvKQtxiqo64K+h8/imaw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"postcss-value-parser": "^4.2.0"
|
"postcss-value-parser": "^4.2.0"
|
||||||
@ -1470,12 +1488,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-ordered-values": {
|
"postcss-ordered-values": {
|
||||||
"version": "5.0.4",
|
"version": "5.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.5.tgz",
|
||||||
"integrity": "sha512-taKtGDZtyYUMVYkg+MuJeBUiTF6cGHZmo/qcW7ibvW79UlyKuSHbo6dpCIiqI+j9oJsXWzP+ovIxoyLDOeQFdw==",
|
"integrity": "sha512-mfY7lXpq+8bDEHfP+muqibDPhZ5eP9zgBEF9XRvoQgXcQe2Db3G1wcvjbnfjXG6wYsl+0UIjikqq4ym1V2jGMQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"cssnano-utils": "^3.0.1",
|
"cssnano-utils": "^3.0.2",
|
||||||
"postcss-value-parser": "^4.2.0"
|
"postcss-value-parser": "^4.2.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -1603,9 +1621,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-reduce-initial": {
|
"postcss-reduce-initial": {
|
||||||
"version": "5.0.2",
|
"version": "5.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.3.tgz",
|
||||||
"integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==",
|
"integrity": "sha512-c88TkSnQ/Dnwgb4OZbKPOBbCaauwEjbECP5uAuFPOzQ+XdjNjRH7SG0dteXrpp1LlIFEKK76iUGgmw2V0xeieA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"browserslist": "^4.16.6",
|
"browserslist": "^4.16.6",
|
||||||
@ -1613,9 +1631,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-reduce-transforms": {
|
"postcss-reduce-transforms": {
|
||||||
"version": "5.0.3",
|
"version": "5.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.4.tgz",
|
||||||
"integrity": "sha512-yDnTUab5i7auHiNwdcL1f+pBnqQFf+7eC4cbC7D8Lc1FkvNZhtpkdad+9U4wDdFb84haupMf0rA/Zc5LcTe/3A==",
|
"integrity": "sha512-VIJB9SFSaL8B/B7AXb7KHL6/GNNbbCHslgdzS9UDfBZYIA2nx8NLY7iD/BXFSO/1sRUILzBTfHCoW5inP37C5g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"postcss-value-parser": "^4.2.0"
|
"postcss-value-parser": "^4.2.0"
|
||||||
@ -1654,19 +1672,27 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-svgo": {
|
"postcss-svgo": {
|
||||||
"version": "5.0.3",
|
"version": "5.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.4.tgz",
|
||||||
"integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==",
|
"integrity": "sha512-yDKHvULbnZtIrRqhZoA+rxreWpee28JSRH/gy9727u0UCgtpv1M/9WEWY3xySlFa0zQJcqf6oCBJPR5NwkmYpg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"postcss-value-parser": "^4.1.0",
|
"postcss-value-parser": "^4.2.0",
|
||||||
"svgo": "^2.7.0"
|
"svgo": "^2.7.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"postcss-value-parser": {
|
||||||
|
"version": "4.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
|
||||||
|
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"postcss-unique-selectors": {
|
"postcss-unique-selectors": {
|
||||||
"version": "5.0.3",
|
"version": "5.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.4.tgz",
|
||||||
"integrity": "sha512-V5tX2hadSSn+miVCluuK1IDGy+7jAXSOfRZ2DQ+s/4uQZb/orDYBjH0CHgFrXsRw78p4QTuEFA9kI6C956UnHQ==",
|
"integrity": "sha512-5ampwoSDJCxDPoANBIlMgoBcYUHnhaiuLYJR5pj1DLnYQvMRVyFuTA5C3Bvt+aHtiqWpJkD/lXT50Vo1D0ZsAQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"postcss-selector-parser": "^6.0.5"
|
"postcss-selector-parser": "^6.0.5"
|
||||||
@ -1796,9 +1822,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"stylehacks": {
|
"stylehacks": {
|
||||||
"version": "5.0.2",
|
"version": "5.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.3.tgz",
|
||||||
"integrity": "sha512-114zeJdOpTrbQYRD4OU5UWJ99LKUaqCPJTU1HQ/n3q3BwmllFN8kHENaLnOeqVq6AhXrWfxHNZTl33iJ4oy3cQ==",
|
"integrity": "sha512-ENcUdpf4yO0E1rubu8rkxI+JGQk4CgjchynZ4bDBJDfqdy+uhTRSWb8/F3Jtu+Bw5MW45Po3/aQGeIyyxgQtxg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"browserslist": "^4.16.6",
|
"browserslist": "^4.16.6",
|
||||||
@ -1836,9 +1862,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tailwindcss": {
|
"tailwindcss": {
|
||||||
"version": "3.0.18",
|
"version": "3.0.23",
|
||||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.18.tgz",
|
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.23.tgz",
|
||||||
"integrity": "sha512-ihPTpEyA5ANgZbwKlgrbfnzOp9R5vDHFWmqxB1PT8NwOGCOFVVMl+Ps1cQQ369acaqqf1BEF77roCwK0lvNmTw==",
|
"integrity": "sha512-+OZOV9ubyQ6oI2BXEhzw4HrqvgcARY38xv3zKcjnWtMIZstEsXdI9xftd1iB7+RbOnj2HOEzkA0OyB5BaSxPQA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"arg": "^5.0.1",
|
"arg": "^5.0.1",
|
||||||
@ -1854,13 +1880,14 @@
|
|||||||
"is-glob": "^4.0.3",
|
"is-glob": "^4.0.3",
|
||||||
"normalize-path": "^3.0.0",
|
"normalize-path": "^3.0.0",
|
||||||
"object-hash": "^2.2.0",
|
"object-hash": "^2.2.0",
|
||||||
|
"postcss": "^8.4.6",
|
||||||
"postcss-js": "^4.0.0",
|
"postcss-js": "^4.0.0",
|
||||||
"postcss-load-config": "^3.1.0",
|
"postcss-load-config": "^3.1.0",
|
||||||
"postcss-nested": "5.0.6",
|
"postcss-nested": "5.0.6",
|
||||||
"postcss-selector-parser": "^6.0.9",
|
"postcss-selector-parser": "^6.0.9",
|
||||||
"postcss-value-parser": "^4.2.0",
|
"postcss-value-parser": "^4.2.0",
|
||||||
"quick-lru": "^5.1.1",
|
"quick-lru": "^5.1.1",
|
||||||
"resolve": "^1.21.0"
|
"resolve": "^1.22.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"chokidar": {
|
"chokidar": {
|
||||||
|
@ -7,12 +7,12 @@
|
|||||||
"@fortawesome/fontawesome-free": "^6.0.0",
|
"@fortawesome/fontawesome-free": "^6.0.0",
|
||||||
"@tailwindcss/forms": "^0.4.0",
|
"@tailwindcss/forms": "^0.4.0",
|
||||||
"autoprefixer": "^10.4.2",
|
"autoprefixer": "^10.4.2",
|
||||||
"cssnano": "^5.0.16",
|
"cssnano": "^5.0.17",
|
||||||
"flag-icon-css": "^3.5.0",
|
"flag-icon-css": "^3.5.0",
|
||||||
"postcss": "^8.4.6",
|
"postcss": "^8.4.7",
|
||||||
"postcss-cli": "^9.1.0",
|
"postcss-cli": "^9.1.0",
|
||||||
"postcss-import": "^14.0.2",
|
"postcss-import": "^14.0.2",
|
||||||
"postcss-purgecss": "^2.0.3",
|
"postcss-purgecss": "^2.0.3",
|
||||||
"tailwindcss": "^3.0.18"
|
"tailwindcss": "^3.0.23"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1727,42 +1727,42 @@ mergeItems flags items receive =
|
|||||||
|
|
||||||
reprocessMultiple :
|
reprocessMultiple :
|
||||||
Flags
|
Flags
|
||||||
-> Set String
|
-> List String
|
||||||
-> (Result Http.Error BasicResult -> msg)
|
-> (Result Http.Error BasicResult -> msg)
|
||||||
-> Cmd msg
|
-> Cmd msg
|
||||||
reprocessMultiple flags items receive =
|
reprocessMultiple flags items receive =
|
||||||
Http2.authPost
|
Http2.authPost
|
||||||
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/reprocess"
|
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/reprocess"
|
||||||
, account = getAccount flags
|
, account = getAccount flags
|
||||||
, body = Http.jsonBody (Api.Model.IdList.encode (Set.toList items |> IdList))
|
, body = Http.jsonBody (Api.Model.IdList.encode (IdList items))
|
||||||
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
confirmMultiple :
|
confirmMultiple :
|
||||||
Flags
|
Flags
|
||||||
-> Set String
|
-> List String
|
||||||
-> (Result Http.Error BasicResult -> msg)
|
-> (Result Http.Error BasicResult -> msg)
|
||||||
-> Cmd msg
|
-> Cmd msg
|
||||||
confirmMultiple flags ids receive =
|
confirmMultiple flags ids receive =
|
||||||
Http2.authPut
|
Http2.authPut
|
||||||
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/confirm"
|
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/confirm"
|
||||||
, account = getAccount flags
|
, account = getAccount flags
|
||||||
, body = Http.jsonBody (Api.Model.IdList.encode (IdList (Set.toList ids)))
|
, body = Http.jsonBody (Api.Model.IdList.encode (IdList ids))
|
||||||
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
unconfirmMultiple :
|
unconfirmMultiple :
|
||||||
Flags
|
Flags
|
||||||
-> Set String
|
-> List String
|
||||||
-> (Result Http.Error BasicResult -> msg)
|
-> (Result Http.Error BasicResult -> msg)
|
||||||
-> Cmd msg
|
-> Cmd msg
|
||||||
unconfirmMultiple flags ids receive =
|
unconfirmMultiple flags ids receive =
|
||||||
Http2.authPut
|
Http2.authPut
|
||||||
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/unconfirm"
|
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/unconfirm"
|
||||||
, account = getAccount flags
|
, account = getAccount flags
|
||||||
, body = Http.jsonBody (Api.Model.IdList.encode (IdList (Set.toList ids)))
|
, body = Http.jsonBody (Api.Model.IdList.encode (IdList ids))
|
||||||
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1937,28 +1937,28 @@ setConcEquipmentMultiple flags data receive =
|
|||||||
|
|
||||||
deleteAllItems :
|
deleteAllItems :
|
||||||
Flags
|
Flags
|
||||||
-> Set String
|
-> List String
|
||||||
-> (Result Http.Error BasicResult -> msg)
|
-> (Result Http.Error BasicResult -> msg)
|
||||||
-> Cmd msg
|
-> Cmd msg
|
||||||
deleteAllItems flags ids receive =
|
deleteAllItems flags ids receive =
|
||||||
Http2.authPost
|
Http2.authPost
|
||||||
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/deleteAll"
|
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/deleteAll"
|
||||||
, account = getAccount flags
|
, account = getAccount flags
|
||||||
, body = Http.jsonBody (Api.Model.IdList.encode (IdList (Set.toList ids)))
|
, body = Http.jsonBody (Api.Model.IdList.encode (IdList ids))
|
||||||
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
restoreAllItems :
|
restoreAllItems :
|
||||||
Flags
|
Flags
|
||||||
-> Set String
|
-> List String
|
||||||
-> (Result Http.Error BasicResult -> msg)
|
-> (Result Http.Error BasicResult -> msg)
|
||||||
-> Cmd msg
|
-> Cmd msg
|
||||||
restoreAllItems flags ids receive =
|
restoreAllItems flags ids receive =
|
||||||
Http2.authPost
|
Http2.authPost
|
||||||
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/restoreAll"
|
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/restoreAll"
|
||||||
, account = getAccount flags
|
, account = getAccount flags
|
||||||
, body = Http.jsonBody (Api.Model.IdList.encode (IdList (Set.toList ids)))
|
, body = Http.jsonBody (Api.Model.IdList.encode (IdList ids))
|
||||||
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ import Api.Model.VersionInfo exposing (VersionInfo)
|
|||||||
import Browser exposing (UrlRequest)
|
import Browser exposing (UrlRequest)
|
||||||
import Browser.Navigation exposing (Key)
|
import Browser.Navigation exposing (Key)
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
|
import Data.ItemIds exposing (ItemIds)
|
||||||
import Data.ServerEvent exposing (ServerEvent)
|
import Data.ServerEvent exposing (ServerEvent)
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
import Data.UiTheme exposing (UiTheme)
|
import Data.UiTheme exposing (UiTheme)
|
||||||
@ -69,6 +70,7 @@ type alias Model =
|
|||||||
, langMenuOpen : Bool
|
, langMenuOpen : Bool
|
||||||
, showNewItemsArrived : Bool
|
, showNewItemsArrived : Bool
|
||||||
, jobsWaiting : Int
|
, jobsWaiting : Int
|
||||||
|
, selectedItems : ItemIds
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -133,6 +135,7 @@ init key url flags_ settings =
|
|||||||
, langMenuOpen = False
|
, langMenuOpen = False
|
||||||
, showNewItemsArrived = False
|
, showNewItemsArrived = False
|
||||||
, jobsWaiting = 0
|
, jobsWaiting = 0
|
||||||
|
, selectedItems = Data.ItemIds.empty
|
||||||
}
|
}
|
||||||
, Cmd.batch
|
, Cmd.batch
|
||||||
[ Cmd.map DashboardMsg dbc
|
[ Cmd.map DashboardMsg dbc
|
||||||
|
@ -15,7 +15,9 @@ import App.Data exposing (..)
|
|||||||
import Browser exposing (UrlRequest(..))
|
import Browser exposing (UrlRequest(..))
|
||||||
import Browser.Navigation as Nav
|
import Browser.Navigation as Nav
|
||||||
import Data.AppEvent exposing (AppEvent(..))
|
import Data.AppEvent exposing (AppEvent(..))
|
||||||
|
import Data.Environment as Env
|
||||||
import Data.Flags
|
import Data.Flags
|
||||||
|
import Data.ItemIds exposing (ItemIds)
|
||||||
import Data.ServerEvent exposing (ServerEvent(..))
|
import Data.ServerEvent exposing (ServerEvent(..))
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
import Data.UiTheme
|
import Data.UiTheme
|
||||||
@ -346,6 +348,15 @@ updateWithSub msg model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
modelEnv : Model -> Env.Update
|
||||||
|
modelEnv model =
|
||||||
|
{ key = model.key
|
||||||
|
, selectedItems = model.selectedItems
|
||||||
|
, flags = model.flags
|
||||||
|
, settings = model.uiSettings
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
applyClientSettings : Messages -> Model -> UiSettings -> ( Model, Cmd Msg, Sub Msg )
|
applyClientSettings : Messages -> Model -> UiSettings -> ( Model, Cmd Msg, Sub Msg )
|
||||||
applyClientSettings texts model settings =
|
applyClientSettings texts model settings =
|
||||||
let
|
let
|
||||||
@ -368,6 +379,18 @@ applyClientSettings texts model settings =
|
|||||||
{ model | uiSettings = settings }
|
{ model | uiSettings = settings }
|
||||||
|
|
||||||
|
|
||||||
|
applySelectionChange : Messages -> Model -> ItemIds -> ( Model, Cmd Msg, Sub Msg )
|
||||||
|
applySelectionChange texts model newSelection =
|
||||||
|
if model.selectedItems == newSelection then
|
||||||
|
( { model | selectedItems = newSelection }, Cmd.none, Sub.none )
|
||||||
|
|
||||||
|
else
|
||||||
|
Util.Update.andThen2
|
||||||
|
[ updateSearch texts Page.Search.Data.ItemSelectionChanged
|
||||||
|
]
|
||||||
|
{ model | selectedItems = newSelection }
|
||||||
|
|
||||||
|
|
||||||
updateDashboard : Messages -> Page.Dashboard.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
|
updateDashboard : Messages -> Page.Dashboard.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
|
||||||
updateDashboard texts lmsg model =
|
updateDashboard texts lmsg model =
|
||||||
let
|
let
|
||||||
@ -427,17 +450,16 @@ updateItemDetail texts lmsg model =
|
|||||||
|
|
||||||
result =
|
result =
|
||||||
Page.ItemDetail.Update.update
|
Page.ItemDetail.Update.update
|
||||||
model.key
|
|
||||||
model.flags
|
|
||||||
inav
|
inav
|
||||||
model.uiSettings
|
(modelEnv model)
|
||||||
lmsg
|
lmsg
|
||||||
model.itemDetailModel
|
model.itemDetailModel
|
||||||
|
|
||||||
model_ =
|
( model_, cmd_, sub_ ) =
|
||||||
{ model
|
applySelectionChange
|
||||||
| itemDetailModel = result.model
|
texts
|
||||||
}
|
{ model | itemDetailModel = result.model }
|
||||||
|
result.selectedItems
|
||||||
|
|
||||||
( hm, hc, hs ) =
|
( hm, hc, hs ) =
|
||||||
updateSearch texts (Page.Search.Data.SetLinkTarget result.linkTarget) model_
|
updateSearch texts (Page.Search.Data.SetLinkTarget result.linkTarget) model_
|
||||||
@ -451,8 +473,8 @@ updateItemDetail texts lmsg model =
|
|||||||
( hm, hc, hs )
|
( hm, hc, hs )
|
||||||
in
|
in
|
||||||
( hm1
|
( hm1
|
||||||
, Cmd.batch [ Cmd.map ItemDetailMsg result.cmd, hc, hc1 ]
|
, Cmd.batch [ Cmd.map ItemDetailMsg result.cmd, hc, hc1, cmd_ ]
|
||||||
, Sub.batch [ Sub.map ItemDetailMsg result.sub, hs, hs1 ]
|
, Sub.batch [ Sub.map ItemDetailMsg result.sub, hs, hs1, sub_ ]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -576,7 +598,7 @@ updateLogin lmsg model =
|
|||||||
updateSearch : Messages -> Page.Search.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
|
updateSearch : Messages -> Page.Search.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
|
||||||
updateSearch texts lmsg model =
|
updateSearch texts lmsg model =
|
||||||
let
|
let
|
||||||
( mid, bmId ) =
|
( lastViewItemId, bookmarkId ) =
|
||||||
case model.page of
|
case model.page of
|
||||||
SearchPage bId ->
|
SearchPage bId ->
|
||||||
( Util.Maybe.fromString model.itemDetailModel.detail.item.id, bId )
|
( Util.Maybe.fromString model.itemDetailModel.detail.item.id, bId )
|
||||||
@ -584,11 +606,11 @@ updateSearch texts lmsg model =
|
|||||||
_ ->
|
_ ->
|
||||||
( Nothing, Nothing )
|
( Nothing, Nothing )
|
||||||
|
|
||||||
result =
|
env =
|
||||||
Page.Search.Update.update bmId mid model.key model.flags texts.search model.uiSettings lmsg model.searchModel
|
modelEnv model
|
||||||
|
|
||||||
model_ =
|
result =
|
||||||
{ model | searchModel = result.model }
|
Page.Search.Update.update texts.search bookmarkId lastViewItemId env lmsg model.searchModel
|
||||||
|
|
||||||
lc =
|
lc =
|
||||||
case result.appEvent of
|
case result.appEvent of
|
||||||
@ -597,15 +619,13 @@ updateSearch texts lmsg model =
|
|||||||
|
|
||||||
AppNothing ->
|
AppNothing ->
|
||||||
Cmd.none
|
Cmd.none
|
||||||
|
|
||||||
|
( model_, cmd_, sub_ ) =
|
||||||
|
applySelectionChange texts { model | searchModel = result.model } result.selectedItems
|
||||||
in
|
in
|
||||||
( model_
|
( model_
|
||||||
, Cmd.batch
|
, Cmd.batch [ Cmd.map SearchMsg result.cmd, lc, cmd_ ]
|
||||||
[ Cmd.map SearchMsg result.cmd
|
, Sub.batch [ Sub.map SearchMsg result.sub, sub_ ]
|
||||||
, lc
|
|
||||||
]
|
|
||||||
, Sub.batch
|
|
||||||
[ Sub.map SearchMsg result.sub
|
|
||||||
]
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ module App.View2 exposing (view)
|
|||||||
import Api.Model.AuthResult exposing (AuthResult)
|
import Api.Model.AuthResult exposing (AuthResult)
|
||||||
import App.Data exposing (..)
|
import App.Data exposing (..)
|
||||||
import Comp.Basic as B
|
import Comp.Basic as B
|
||||||
|
import Data.Environment as Env
|
||||||
import Data.Flags
|
import Data.Flags
|
||||||
import Data.Icons as Icons
|
import Data.Icons as Icons
|
||||||
import Data.UiSettings
|
import Data.UiSettings
|
||||||
@ -485,6 +486,15 @@ dropdownMenu =
|
|||||||
" absolute right-0 bg-white dark:bg-slate-800 border dark:border-slate-700 dark:text-slate-300 shadow-lg opacity-1 transition duration-200 min-w-max "
|
" absolute right-0 bg-white dark:bg-slate-800 border dark:border-slate-700 dark:text-slate-300 shadow-lg opacity-1 transition duration-200 min-w-max "
|
||||||
|
|
||||||
|
|
||||||
|
modelEnv : Model -> Env.View
|
||||||
|
modelEnv model =
|
||||||
|
{ sidebarVisible = model.sidebarVisible
|
||||||
|
, flags = model.flags
|
||||||
|
, settings = model.uiSettings
|
||||||
|
, selectedItems = model.selectedItems
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
viewDashboard : Messages -> Model -> List (Html Msg)
|
viewDashboard : Messages -> Model -> List (Html Msg)
|
||||||
viewDashboard texts model =
|
viewDashboard texts model =
|
||||||
[ Html.map DashboardMsg
|
[ Html.map DashboardMsg
|
||||||
@ -549,17 +559,18 @@ viewShareDetail texts shareId itemId model =
|
|||||||
|
|
||||||
viewSearch : Messages -> Maybe String -> Model -> List (Html Msg)
|
viewSearch : Messages -> Maybe String -> Model -> List (Html Msg)
|
||||||
viewSearch texts bmId model =
|
viewSearch texts bmId model =
|
||||||
|
let
|
||||||
|
env =
|
||||||
|
modelEnv model
|
||||||
|
in
|
||||||
[ Html.map SearchMsg
|
[ Html.map SearchMsg
|
||||||
(Search.viewSidebar texts.search
|
(Search.viewSidebar texts.search
|
||||||
model.sidebarVisible
|
env
|
||||||
model.flags
|
|
||||||
model.uiSettings
|
|
||||||
model.searchModel
|
model.searchModel
|
||||||
)
|
)
|
||||||
, Html.map SearchMsg
|
, Html.map SearchMsg
|
||||||
(Search.viewContent texts.search
|
(Search.viewContent texts.search
|
||||||
model.flags
|
env
|
||||||
model.uiSettings
|
|
||||||
model.searchModel
|
model.searchModel
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
@ -685,19 +696,19 @@ viewItemDetail texts id model =
|
|||||||
let
|
let
|
||||||
inav =
|
inav =
|
||||||
Page.Search.Data.itemNav id model.searchModel
|
Page.Search.Data.itemNav id model.searchModel
|
||||||
|
|
||||||
|
env =
|
||||||
|
modelEnv model
|
||||||
in
|
in
|
||||||
[ Html.map ItemDetailMsg
|
[ Html.map ItemDetailMsg
|
||||||
(ItemDetail.viewSidebar texts.itemDetail
|
(ItemDetail.viewSidebar texts.itemDetail
|
||||||
model.sidebarVisible
|
env
|
||||||
model.flags
|
|
||||||
model.uiSettings
|
|
||||||
model.itemDetailModel
|
model.itemDetailModel
|
||||||
)
|
)
|
||||||
, Html.map ItemDetailMsg
|
, Html.map ItemDetailMsg
|
||||||
(ItemDetail.viewContent texts.itemDetail
|
(ItemDetail.viewContent texts.itemDetail
|
||||||
inav
|
inav
|
||||||
model.flags
|
env
|
||||||
model.uiSettings
|
|
||||||
model.itemDetailModel
|
model.itemDetailModel
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
@ -24,6 +24,7 @@ import Data.Fields
|
|||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Data.Icons as Icons
|
import Data.Icons as Icons
|
||||||
import Data.ItemArrange exposing (ItemArrange)
|
import Data.ItemArrange exposing (ItemArrange)
|
||||||
|
import Data.ItemIds exposing (ItemIdChange, ItemIds)
|
||||||
import Data.ItemSelection exposing (ItemSelection)
|
import Data.ItemSelection exposing (ItemSelection)
|
||||||
import Data.ItemTemplate as IT
|
import Data.ItemTemplate as IT
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
@ -49,7 +50,7 @@ type alias Model =
|
|||||||
|
|
||||||
type Msg
|
type Msg
|
||||||
= CyclePreview ItemLight
|
= CyclePreview ItemLight
|
||||||
| ToggleSelectItem (Set String) String
|
| ToggleSelectItem ItemIds String
|
||||||
| ItemDDMsg DD.Msg
|
| ItemDDMsg DD.Msg
|
||||||
| SetLinkTarget LinkTarget
|
| SetLinkTarget LinkTarget
|
||||||
| ToggleRowOpen String
|
| ToggleRowOpen String
|
||||||
@ -70,7 +71,7 @@ type alias ViewConfig =
|
|||||||
type alias UpdateResult =
|
type alias UpdateResult =
|
||||||
{ model : Model
|
{ model : Model
|
||||||
, dragModel : DD.Model
|
, dragModel : DD.Model
|
||||||
, selection : ItemSelection
|
, selection : ItemIdChange
|
||||||
, linkTarget : LinkTarget
|
, linkTarget : LinkTarget
|
||||||
, toggleRow : Maybe String
|
, toggleRow : Maybe String
|
||||||
}
|
}
|
||||||
@ -117,25 +118,21 @@ update : DD.Model -> Msg -> Model -> UpdateResult
|
|||||||
update ddm msg model =
|
update ddm msg model =
|
||||||
case msg of
|
case msg of
|
||||||
ToggleRowOpen id ->
|
ToggleRowOpen id ->
|
||||||
UpdateResult model ddm Data.ItemSelection.Inactive LinkNone (Just id)
|
UpdateResult model ddm Data.ItemIds.noChange LinkNone (Just id)
|
||||||
|
|
||||||
ItemDDMsg lm ->
|
ItemDDMsg lm ->
|
||||||
let
|
let
|
||||||
ddd =
|
ddd =
|
||||||
DD.update lm ddm
|
DD.update lm ddm
|
||||||
in
|
in
|
||||||
UpdateResult model ddd.model Data.ItemSelection.Inactive LinkNone Nothing
|
UpdateResult model ddd.model Data.ItemIds.noChange LinkNone Nothing
|
||||||
|
|
||||||
ToggleSelectItem ids id ->
|
ToggleSelectItem ids id ->
|
||||||
let
|
let
|
||||||
newSet =
|
newSet =
|
||||||
if Set.member id ids then
|
Data.ItemIds.toggle ids id
|
||||||
Set.remove id ids
|
|
||||||
|
|
||||||
else
|
|
||||||
Set.insert id ids
|
|
||||||
in
|
in
|
||||||
UpdateResult model ddm (Data.ItemSelection.Active newSet) LinkNone Nothing
|
UpdateResult model ddm newSet LinkNone Nothing
|
||||||
|
|
||||||
CyclePreview item ->
|
CyclePreview item ->
|
||||||
let
|
let
|
||||||
@ -147,12 +144,12 @@ update ddm msg model =
|
|||||||
in
|
in
|
||||||
UpdateResult { model | previewAttach = next }
|
UpdateResult { model | previewAttach = next }
|
||||||
ddm
|
ddm
|
||||||
Data.ItemSelection.Inactive
|
Data.ItemIds.noChange
|
||||||
LinkNone
|
LinkNone
|
||||||
Nothing
|
Nothing
|
||||||
|
|
||||||
SetLinkTarget target ->
|
SetLinkTarget target ->
|
||||||
UpdateResult model ddm Data.ItemSelection.Inactive target Nothing
|
UpdateResult model ddm Data.ItemIds.noChange target Nothing
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -532,7 +529,7 @@ viewCard texts cfg settings flags model item =
|
|||||||
|
|
||||||
|
|
||||||
mkCardAction : Texts -> ViewConfig -> UiSettings -> ItemLight -> List (Attribute Msg)
|
mkCardAction : Texts -> ViewConfig -> UiSettings -> ItemLight -> List (Attribute Msg)
|
||||||
mkCardAction texts cfg settings item =
|
mkCardAction texts cfg _ item =
|
||||||
case cfg.selection of
|
case cfg.selection of
|
||||||
Data.ItemSelection.Inactive ->
|
Data.ItemSelection.Inactive ->
|
||||||
case cfg.arrange of
|
case cfg.arrange of
|
||||||
@ -977,7 +974,7 @@ isSelected : ViewConfig -> String -> Bool
|
|||||||
isSelected cfg id =
|
isSelected cfg id =
|
||||||
case cfg.selection of
|
case cfg.selection of
|
||||||
Data.ItemSelection.Active ids ->
|
Data.ItemSelection.Active ids ->
|
||||||
Set.member id ids
|
Data.ItemIds.isMember ids id
|
||||||
|
|
||||||
Data.ItemSelection.Inactive ->
|
Data.ItemSelection.Inactive ->
|
||||||
False
|
False
|
||||||
|
@ -25,6 +25,7 @@ import Comp.ItemCard
|
|||||||
import Comp.LinkTarget exposing (LinkTarget)
|
import Comp.LinkTarget exposing (LinkTarget)
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Data.ItemArrange exposing (ItemArrange)
|
import Data.ItemArrange exposing (ItemArrange)
|
||||||
|
import Data.ItemIds exposing (ItemIdChange)
|
||||||
import Data.ItemSelection exposing (ItemSelection)
|
import Data.ItemSelection exposing (ItemSelection)
|
||||||
import Data.Items
|
import Data.Items
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
@ -83,7 +84,7 @@ type alias UpdateResult =
|
|||||||
{ model : Model
|
{ model : Model
|
||||||
, cmd : Cmd Msg
|
, cmd : Cmd Msg
|
||||||
, dragModel : DD.Model
|
, dragModel : DD.Model
|
||||||
, selection : ItemSelection
|
, selection : ItemIdChange
|
||||||
, linkTarget : LinkTarget
|
, linkTarget : LinkTarget
|
||||||
, toggleOpenRow : Maybe String
|
, toggleOpenRow : Maybe String
|
||||||
}
|
}
|
||||||
@ -105,7 +106,7 @@ updateDrag dm _ msg model =
|
|||||||
UpdateResult newModel
|
UpdateResult newModel
|
||||||
Cmd.none
|
Cmd.none
|
||||||
dm
|
dm
|
||||||
Data.ItemSelection.Inactive
|
Data.ItemIds.noChange
|
||||||
Comp.LinkTarget.LinkNone
|
Comp.LinkTarget.LinkNone
|
||||||
Nothing
|
Nothing
|
||||||
|
|
||||||
@ -114,7 +115,7 @@ updateDrag dm _ msg model =
|
|||||||
UpdateResult model
|
UpdateResult model
|
||||||
Cmd.none
|
Cmd.none
|
||||||
dm
|
dm
|
||||||
Data.ItemSelection.Inactive
|
Data.ItemIds.noChange
|
||||||
Comp.LinkTarget.LinkNone
|
Comp.LinkTarget.LinkNone
|
||||||
Nothing
|
Nothing
|
||||||
|
|
||||||
@ -126,7 +127,7 @@ updateDrag dm _ msg model =
|
|||||||
UpdateResult newModel
|
UpdateResult newModel
|
||||||
Cmd.none
|
Cmd.none
|
||||||
dm
|
dm
|
||||||
Data.ItemSelection.Inactive
|
Data.ItemIds.noChange
|
||||||
Comp.LinkTarget.LinkNone
|
Comp.LinkTarget.LinkNone
|
||||||
Nothing
|
Nothing
|
||||||
|
|
||||||
@ -153,7 +154,7 @@ updateDrag dm _ msg model =
|
|||||||
UpdateResult { model | results = removeItemById id model.results }
|
UpdateResult { model | results = removeItemById id model.results }
|
||||||
Cmd.none
|
Cmd.none
|
||||||
dm
|
dm
|
||||||
Data.ItemSelection.Inactive
|
Data.ItemIds.noChange
|
||||||
Comp.LinkTarget.LinkNone
|
Comp.LinkTarget.LinkNone
|
||||||
Nothing
|
Nothing
|
||||||
|
|
||||||
|
@ -12,10 +12,10 @@ module Comp.ItemDetail exposing
|
|||||||
, view2
|
, view2
|
||||||
)
|
)
|
||||||
|
|
||||||
import Browser.Navigation as Nav
|
|
||||||
import Comp.ItemDetail.Model exposing (Msg(..), UpdateResult)
|
import Comp.ItemDetail.Model exposing (Msg(..), UpdateResult)
|
||||||
import Comp.ItemDetail.Update
|
import Comp.ItemDetail.Update
|
||||||
import Comp.ItemDetail.View2
|
import Comp.ItemDetail.View2
|
||||||
|
import Data.Environment as Env
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Data.ItemNav exposing (ItemNav)
|
import Data.ItemNav exposing (ItemNav)
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
@ -33,11 +33,11 @@ emptyModel =
|
|||||||
Comp.ItemDetail.Model.emptyModel
|
Comp.ItemDetail.Model.emptyModel
|
||||||
|
|
||||||
|
|
||||||
update : Nav.Key -> Flags -> ItemNav -> UiSettings -> Msg -> Model -> UpdateResult
|
update : ItemNav -> Env.Update -> Msg -> Model -> UpdateResult
|
||||||
update =
|
update =
|
||||||
Comp.ItemDetail.Update.update
|
Comp.ItemDetail.Update.update
|
||||||
|
|
||||||
|
|
||||||
view2 : Texts -> Flags -> ItemNav -> UiSettings -> Model -> Html Msg
|
view2 : Texts -> ItemNav -> Env.View -> Model -> Html Msg
|
||||||
view2 =
|
view2 =
|
||||||
Comp.ItemDetail.View2.view
|
Comp.ItemDetail.View2.view
|
||||||
|
@ -24,8 +24,8 @@ import Api.Model.ItemsAndRefs exposing (ItemsAndRefs)
|
|||||||
import Api.Model.ReferenceList exposing (ReferenceList)
|
import Api.Model.ReferenceList exposing (ReferenceList)
|
||||||
import Data.Direction exposing (Direction)
|
import Data.Direction exposing (Direction)
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
|
import Data.ItemIds exposing (ItemIds)
|
||||||
import Http
|
import Http
|
||||||
import Set exposing (Set)
|
|
||||||
|
|
||||||
|
|
||||||
type FormChange
|
type FormChange
|
||||||
@ -49,14 +49,14 @@ type FormChange
|
|||||||
|
|
||||||
multiUpdate :
|
multiUpdate :
|
||||||
Flags
|
Flags
|
||||||
-> Set String
|
-> ItemIds
|
||||||
-> FormChange
|
-> FormChange
|
||||||
-> (Result Http.Error BasicResult -> msg)
|
-> (Result Http.Error BasicResult -> msg)
|
||||||
-> Cmd msg
|
-> Cmd msg
|
||||||
multiUpdate flags ids change receive =
|
multiUpdate flags ids change receive =
|
||||||
let
|
let
|
||||||
items =
|
items =
|
||||||
Set.toList ids
|
Data.ItemIds.toList ids
|
||||||
in
|
in
|
||||||
case change of
|
case change of
|
||||||
CustomValueChange field value ->
|
CustomValueChange field value ->
|
||||||
@ -159,10 +159,10 @@ multiUpdate flags ids change receive =
|
|||||||
|
|
||||||
ConfirmChange flag ->
|
ConfirmChange flag ->
|
||||||
if flag then
|
if flag then
|
||||||
Api.confirmMultiple flags ids receive
|
Api.confirmMultiple flags items receive
|
||||||
|
|
||||||
else
|
else
|
||||||
Api.unconfirmMultiple flags ids receive
|
Api.unconfirmMultiple flags items receive
|
||||||
|
|
||||||
NoFormChange ->
|
NoFormChange ->
|
||||||
Cmd.none
|
Cmd.none
|
||||||
|
@ -57,6 +57,7 @@ import Comp.SimpleTextInput
|
|||||||
import Comp.TagDropdown
|
import Comp.TagDropdown
|
||||||
import Data.Direction exposing (Direction)
|
import Data.Direction exposing (Direction)
|
||||||
import Data.Fields exposing (Field)
|
import Data.Fields exposing (Field)
|
||||||
|
import Data.ItemIds exposing (ItemIdChange)
|
||||||
import DatePicker exposing (DatePicker)
|
import DatePicker exposing (DatePicker)
|
||||||
import Dict exposing (Dict)
|
import Dict exposing (Dict)
|
||||||
import File exposing (File)
|
import File exposing (File)
|
||||||
@ -367,6 +368,7 @@ type Msg
|
|||||||
| ToggleShowQrAttach String
|
| ToggleShowQrAttach String
|
||||||
| PrintElement String
|
| PrintElement String
|
||||||
| SetNameMsg Comp.SimpleTextInput.Msg
|
| SetNameMsg Comp.SimpleTextInput.Msg
|
||||||
|
| ToggleSelectItem
|
||||||
|
|
||||||
|
|
||||||
type SaveNameState
|
type SaveNameState
|
||||||
@ -381,22 +383,23 @@ type alias UpdateResult =
|
|||||||
, sub : Sub Msg
|
, sub : Sub Msg
|
||||||
, linkTarget : LinkTarget
|
, linkTarget : LinkTarget
|
||||||
, removedItem : Maybe String
|
, removedItem : Maybe String
|
||||||
|
, selectionChange : ItemIdChange
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
resultModel : Model -> UpdateResult
|
resultModel : Model -> UpdateResult
|
||||||
resultModel model =
|
resultModel model =
|
||||||
UpdateResult model Cmd.none Sub.none Comp.LinkTarget.LinkNone Nothing
|
UpdateResult model Cmd.none Sub.none Comp.LinkTarget.LinkNone Nothing Data.ItemIds.noChange
|
||||||
|
|
||||||
|
|
||||||
resultModelCmd : ( Model, Cmd Msg ) -> UpdateResult
|
resultModelCmd : ( Model, Cmd Msg ) -> UpdateResult
|
||||||
resultModelCmd ( model, cmd ) =
|
resultModelCmd ( model, cmd ) =
|
||||||
UpdateResult model cmd Sub.none Comp.LinkTarget.LinkNone Nothing
|
UpdateResult model cmd Sub.none Comp.LinkTarget.LinkNone Nothing Data.ItemIds.noChange
|
||||||
|
|
||||||
|
|
||||||
resultModelCmdSub : ( Model, Cmd Msg, Sub Msg ) -> UpdateResult
|
resultModelCmdSub : ( Model, Cmd Msg, Sub Msg ) -> UpdateResult
|
||||||
resultModelCmdSub ( model, cmd, sub ) =
|
resultModelCmdSub ( model, cmd, sub ) =
|
||||||
UpdateResult model cmd sub Comp.LinkTarget.LinkNone Nothing
|
UpdateResult model cmd sub Comp.LinkTarget.LinkNone Nothing Data.ItemIds.noChange
|
||||||
|
|
||||||
|
|
||||||
personMatchesOrg : Model -> Bool
|
personMatchesOrg : Model -> Bool
|
||||||
|
@ -20,7 +20,6 @@ import Api.Model.OptionalDate exposing (OptionalDate)
|
|||||||
import Api.Model.OptionalId exposing (OptionalId)
|
import Api.Model.OptionalId exposing (OptionalId)
|
||||||
import Api.Model.OptionalText exposing (OptionalText)
|
import Api.Model.OptionalText exposing (OptionalText)
|
||||||
import Api.Model.StringList exposing (StringList)
|
import Api.Model.StringList exposing (StringList)
|
||||||
import Browser.Navigation as Nav
|
|
||||||
import Comp.AttachmentMeta
|
import Comp.AttachmentMeta
|
||||||
import Comp.CustomFieldMultiInput
|
import Comp.CustomFieldMultiInput
|
||||||
import Comp.DatePicker
|
import Comp.DatePicker
|
||||||
@ -58,10 +57,12 @@ import Comp.SimpleTextInput
|
|||||||
import Comp.TagDropdown
|
import Comp.TagDropdown
|
||||||
import Data.CustomFieldChange exposing (CustomFieldChange(..))
|
import Data.CustomFieldChange exposing (CustomFieldChange(..))
|
||||||
import Data.Direction
|
import Data.Direction
|
||||||
|
import Data.Environment as Env
|
||||||
import Data.EquipmentOrder
|
import Data.EquipmentOrder
|
||||||
import Data.Fields exposing (Field)
|
import Data.Fields exposing (Field)
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Data.FolderOrder
|
import Data.FolderOrder
|
||||||
|
import Data.ItemIds
|
||||||
import Data.ItemNav exposing (ItemNav)
|
import Data.ItemNav exposing (ItemNav)
|
||||||
import Data.PersonOrder
|
import Data.PersonOrder
|
||||||
import Data.PersonUse
|
import Data.PersonUse
|
||||||
@ -74,7 +75,6 @@ import Http
|
|||||||
import Page exposing (Page(..))
|
import Page exposing (Page(..))
|
||||||
import Ports
|
import Ports
|
||||||
import Set exposing (Set)
|
import Set exposing (Set)
|
||||||
import Time
|
|
||||||
import Util.File exposing (makeFileId)
|
import Util.File exposing (makeFileId)
|
||||||
import Util.List
|
import Util.List
|
||||||
import Util.Maybe
|
import Util.Maybe
|
||||||
@ -82,8 +82,8 @@ import Util.String
|
|||||||
import Util.Tag
|
import Util.Tag
|
||||||
|
|
||||||
|
|
||||||
update : Nav.Key -> Flags -> ItemNav -> UiSettings -> Msg -> Model -> UpdateResult
|
update : ItemNav -> Env.Update -> Msg -> Model -> UpdateResult
|
||||||
update key flags inav settings msg model =
|
update inav env msg model =
|
||||||
case msg of
|
case msg of
|
||||||
Init ->
|
Init ->
|
||||||
let
|
let
|
||||||
@ -91,10 +91,10 @@ update key flags inav settings msg model =
|
|||||||
Comp.DatePicker.init
|
Comp.DatePicker.init
|
||||||
|
|
||||||
( im, ic ) =
|
( im, ic ) =
|
||||||
Comp.ItemMail.init flags
|
Comp.ItemMail.init env.flags
|
||||||
|
|
||||||
( cm, cc ) =
|
( cm, cc ) =
|
||||||
Comp.CustomFieldMultiInput.init flags
|
Comp.CustomFieldMultiInput.init env.flags
|
||||||
in
|
in
|
||||||
resultModelCmd
|
resultModelCmd
|
||||||
( { model
|
( { model
|
||||||
@ -106,30 +106,26 @@ update key flags inav settings msg model =
|
|||||||
, customFieldsModel = cm
|
, customFieldsModel = cm
|
||||||
}
|
}
|
||||||
, Cmd.batch
|
, Cmd.batch
|
||||||
[ getOptions flags
|
[ getOptions env.flags
|
||||||
, Cmd.map ItemDatePickerMsg dpc
|
, Cmd.map ItemDatePickerMsg dpc
|
||||||
, Cmd.map DueDatePickerMsg dpc
|
, Cmd.map DueDatePickerMsg dpc
|
||||||
, Cmd.map ItemMailMsg ic
|
, Cmd.map ItemMailMsg ic
|
||||||
, Cmd.map CustomFieldMsg cc
|
, Cmd.map CustomFieldMsg cc
|
||||||
, Api.getSentMails flags model.item.id SentMailsResp
|
, Api.getSentMails env.flags model.item.id SentMailsResp
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
SetItem item ->
|
SetItem item ->
|
||||||
let
|
let
|
||||||
res1 =
|
res1 =
|
||||||
update key
|
update inav
|
||||||
flags
|
env
|
||||||
inav
|
|
||||||
settings
|
|
||||||
(TagDropdownMsg (Comp.TagDropdown.setSelected item.tags))
|
(TagDropdownMsg (Comp.TagDropdown.setSelected item.tags))
|
||||||
model
|
model
|
||||||
|
|
||||||
res2 =
|
res2 =
|
||||||
update key
|
update inav
|
||||||
flags
|
env
|
||||||
inav
|
|
||||||
settings
|
|
||||||
(DirDropdownMsg
|
(DirDropdownMsg
|
||||||
(Comp.Dropdown.SetSelection
|
(Comp.Dropdown.SetSelection
|
||||||
(Data.Direction.fromString item.direction
|
(Data.Direction.fromString item.direction
|
||||||
@ -141,10 +137,8 @@ update key flags inav settings msg model =
|
|||||||
res1.model
|
res1.model
|
||||||
|
|
||||||
res3 =
|
res3 =
|
||||||
update key
|
update inav
|
||||||
flags
|
env
|
||||||
inav
|
|
||||||
settings
|
|
||||||
(OrgDropdownMsg
|
(OrgDropdownMsg
|
||||||
(Comp.Dropdown.SetSelection
|
(Comp.Dropdown.SetSelection
|
||||||
(item.corrOrg
|
(item.corrOrg
|
||||||
@ -156,10 +150,8 @@ update key flags inav settings msg model =
|
|||||||
res2.model
|
res2.model
|
||||||
|
|
||||||
res4 =
|
res4 =
|
||||||
update key
|
update inav
|
||||||
flags
|
env
|
||||||
inav
|
|
||||||
settings
|
|
||||||
(CorrPersonMsg
|
(CorrPersonMsg
|
||||||
(Comp.Dropdown.SetSelection
|
(Comp.Dropdown.SetSelection
|
||||||
(item.corrPerson
|
(item.corrPerson
|
||||||
@ -171,10 +163,8 @@ update key flags inav settings msg model =
|
|||||||
res3.model
|
res3.model
|
||||||
|
|
||||||
res5 =
|
res5 =
|
||||||
update key
|
update inav
|
||||||
flags
|
env
|
||||||
inav
|
|
||||||
settings
|
|
||||||
(ConcPersonMsg
|
(ConcPersonMsg
|
||||||
(Comp.Dropdown.SetSelection
|
(Comp.Dropdown.SetSelection
|
||||||
(item.concPerson
|
(item.concPerson
|
||||||
@ -186,10 +176,8 @@ update key flags inav settings msg model =
|
|||||||
res4.model
|
res4.model
|
||||||
|
|
||||||
res6 =
|
res6 =
|
||||||
update key
|
update inav
|
||||||
flags
|
env
|
||||||
inav
|
|
||||||
settings
|
|
||||||
(ConcEquipMsg
|
(ConcEquipMsg
|
||||||
(Comp.Dropdown.SetSelection
|
(Comp.Dropdown.SetSelection
|
||||||
(item.concEquipment
|
(item.concEquipment
|
||||||
@ -201,13 +189,11 @@ update key flags inav settings msg model =
|
|||||||
res5.model
|
res5.model
|
||||||
|
|
||||||
res7 =
|
res7 =
|
||||||
update key flags inav settings AddFilesReset res6.model
|
update inav env AddFilesReset res6.model
|
||||||
|
|
||||||
res8 =
|
res8 =
|
||||||
update key
|
update inav
|
||||||
flags
|
env
|
||||||
inav
|
|
||||||
settings
|
|
||||||
(FolderDropdownMsg
|
(FolderDropdownMsg
|
||||||
(Comp.Dropdown.SetSelection
|
(Comp.Dropdown.SetSelection
|
||||||
(item.folder
|
(item.folder
|
||||||
@ -219,16 +205,14 @@ update key flags inav settings msg model =
|
|||||||
res7.model
|
res7.model
|
||||||
|
|
||||||
res9 =
|
res9 =
|
||||||
update key
|
update inav
|
||||||
flags
|
env
|
||||||
inav
|
|
||||||
settings
|
|
||||||
(CustomFieldMsg (Comp.CustomFieldMultiInput.setValues item.customfields))
|
(CustomFieldMsg (Comp.CustomFieldMultiInput.setValues item.customfields))
|
||||||
res8.model
|
res8.model
|
||||||
|
|
||||||
proposalCmd =
|
proposalCmd =
|
||||||
if item.state == "created" then
|
if item.state == "created" then
|
||||||
Api.getItemProposals flags item.id GetProposalResp
|
Api.getItemProposals env.flags item.id GetProposalResp
|
||||||
|
|
||||||
else
|
else
|
||||||
Cmd.none
|
Cmd.none
|
||||||
@ -265,11 +249,11 @@ update key flags inav settings msg model =
|
|||||||
, res7.cmd
|
, res7.cmd
|
||||||
, res8.cmd
|
, res8.cmd
|
||||||
, res9.cmd
|
, res9.cmd
|
||||||
, getOptions flags
|
, getOptions env.flags
|
||||||
, proposalCmd
|
, proposalCmd
|
||||||
, Api.getSentMails flags item.id SentMailsResp
|
, Api.getSentMails env.flags item.id SentMailsResp
|
||||||
, Api.getPersons flags "" Data.PersonOrder.NameAsc GetPersonResp
|
, Api.getPersons env.flags "" Data.PersonOrder.NameAsc GetPersonResp
|
||||||
, Cmd.map CustomFieldMsg (Comp.CustomFieldMultiInput.initCmd flags)
|
, Cmd.map CustomFieldMsg (Comp.CustomFieldMultiInput.initCmd env.flags)
|
||||||
]
|
]
|
||||||
, sub =
|
, sub =
|
||||||
Sub.batch
|
Sub.batch
|
||||||
@ -285,6 +269,7 @@ update key flags inav settings msg model =
|
|||||||
]
|
]
|
||||||
, linkTarget = Comp.LinkTarget.LinkNone
|
, linkTarget = Comp.LinkTarget.LinkNone
|
||||||
, removedItem = Nothing
|
, removedItem = Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SetActiveAttachment pos ->
|
SetActiveAttachment pos ->
|
||||||
@ -322,7 +307,7 @@ update key flags inav settings msg model =
|
|||||||
resultModel model
|
resultModel model
|
||||||
|
|
||||||
else
|
else
|
||||||
resultModelCmd ( model, Api.itemDetail flags model.item.id GetItemResp )
|
resultModelCmd ( model, Api.itemDetail env.flags model.item.id GetItemResp )
|
||||||
|
|
||||||
FolderDropdownMsg m ->
|
FolderDropdownMsg m ->
|
||||||
let
|
let
|
||||||
@ -337,7 +322,7 @@ update key flags inav settings msg model =
|
|||||||
|
|
||||||
save =
|
save =
|
||||||
if isDropdownChangeMsg m then
|
if isDropdownChangeMsg m then
|
||||||
setFolder flags newModel idref
|
setFolder env.flags newModel idref
|
||||||
|
|
||||||
else
|
else
|
||||||
Cmd.none
|
Cmd.none
|
||||||
@ -354,7 +339,7 @@ update key flags inav settings msg model =
|
|||||||
|
|
||||||
save =
|
save =
|
||||||
if Comp.TagDropdown.isChangeMsg m then
|
if Comp.TagDropdown.isChangeMsg m then
|
||||||
saveTags flags newModel
|
saveTags env.flags newModel
|
||||||
|
|
||||||
else
|
else
|
||||||
Cmd.none
|
Cmd.none
|
||||||
@ -371,7 +356,7 @@ update key flags inav settings msg model =
|
|||||||
|
|
||||||
save =
|
save =
|
||||||
if isDropdownChangeMsg m then
|
if isDropdownChangeMsg m then
|
||||||
setDirection flags newModel
|
setDirection env.flags newModel
|
||||||
|
|
||||||
else
|
else
|
||||||
Cmd.none
|
Cmd.none
|
||||||
@ -393,7 +378,7 @@ update key flags inav settings msg model =
|
|||||||
|
|
||||||
save =
|
save =
|
||||||
if isDropdownChangeMsg m then
|
if isDropdownChangeMsg m then
|
||||||
setCorrOrg flags newModel idref
|
setCorrOrg env.flags newModel idref
|
||||||
|
|
||||||
else
|
else
|
||||||
Cmd.none
|
Cmd.none
|
||||||
@ -413,7 +398,7 @@ update key flags inav settings msg model =
|
|||||||
|
|
||||||
save =
|
save =
|
||||||
if isDropdownChangeMsg m then
|
if isDropdownChangeMsg m then
|
||||||
setCorrPerson flags newModel idref
|
setCorrPerson env.flags newModel idref
|
||||||
|
|
||||||
else
|
else
|
||||||
Cmd.none
|
Cmd.none
|
||||||
@ -433,7 +418,7 @@ update key flags inav settings msg model =
|
|||||||
|
|
||||||
save =
|
save =
|
||||||
if isDropdownChangeMsg m then
|
if isDropdownChangeMsg m then
|
||||||
setConcPerson flags newModel idref
|
setConcPerson env.flags newModel idref
|
||||||
|
|
||||||
else
|
else
|
||||||
Cmd.none
|
Cmd.none
|
||||||
@ -453,7 +438,7 @@ update key flags inav settings msg model =
|
|||||||
|
|
||||||
save =
|
save =
|
||||||
if isDropdownChangeMsg m then
|
if isDropdownChangeMsg m then
|
||||||
setConcEquip flags newModel idref
|
setConcEquip env.flags newModel idref
|
||||||
|
|
||||||
else
|
else
|
||||||
Cmd.none
|
Cmd.none
|
||||||
@ -468,7 +453,7 @@ update key flags inav settings msg model =
|
|||||||
( setter, value, save ) =
|
( setter, value, save ) =
|
||||||
case result.change of
|
case result.change of
|
||||||
Comp.SimpleTextInput.ValueUpdated v ->
|
Comp.SimpleTextInput.ValueUpdated v ->
|
||||||
( setName flags { model | nameModel = Maybe.withDefault "" v }, v, Saving )
|
( setName env.flags { model | nameModel = Maybe.withDefault "" v }, v, Saving )
|
||||||
|
|
||||||
Comp.SimpleTextInput.ValueUnchanged ->
|
Comp.SimpleTextInput.ValueUnchanged ->
|
||||||
( Cmd.none, Nothing, model.nameState )
|
( Cmd.none, Nothing, model.nameState )
|
||||||
@ -478,6 +463,7 @@ update key flags inav settings msg model =
|
|||||||
, sub = Sub.map SetNameMsg result.sub
|
, sub = Sub.map SetNameMsg result.sub
|
||||||
, linkTarget = Comp.LinkTarget.LinkNone
|
, linkTarget = Comp.LinkTarget.LinkNone
|
||||||
, removedItem = Nothing
|
, removedItem = Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SetNotes str ->
|
SetNotes str ->
|
||||||
@ -509,22 +495,22 @@ update key flags inav settings msg model =
|
|||||||
resultModel model
|
resultModel model
|
||||||
|
|
||||||
SaveNotes ->
|
SaveNotes ->
|
||||||
resultModelCmd ( model, setNotes flags model )
|
resultModelCmd ( model, setNotes env.flags model )
|
||||||
|
|
||||||
ConfirmItem ->
|
ConfirmItem ->
|
||||||
let
|
let
|
||||||
resetCmds =
|
resetCmds =
|
||||||
resetHiddenFields settings flags model.item.id ResetHiddenMsg
|
resetHiddenFields env.settings env.flags model.item.id ResetHiddenMsg
|
||||||
in
|
in
|
||||||
resultModelCmd
|
resultModelCmd
|
||||||
( { model | mobileItemMenuOpen = False }
|
( { model | mobileItemMenuOpen = False }
|
||||||
, Cmd.batch (Api.setConfirmed flags model.item.id SaveResp :: resetCmds)
|
, Cmd.batch (Api.setConfirmed env.flags model.item.id SaveResp :: resetCmds)
|
||||||
)
|
)
|
||||||
|
|
||||||
UnconfirmItem ->
|
UnconfirmItem ->
|
||||||
resultModelCmd
|
resultModelCmd
|
||||||
( { model | mobileItemMenuOpen = False }
|
( { model | mobileItemMenuOpen = False }
|
||||||
, Api.setUnconfirmed flags model.item.id SaveResp
|
, Api.setUnconfirmed env.flags model.item.id SaveResp
|
||||||
)
|
)
|
||||||
|
|
||||||
ItemDatePickerMsg m ->
|
ItemDatePickerMsg m ->
|
||||||
@ -538,13 +524,13 @@ update key flags inav settings msg model =
|
|||||||
newModel =
|
newModel =
|
||||||
{ model | itemDatePicker = dp, itemDate = Just (Comp.DatePicker.midOfDay date) }
|
{ model | itemDatePicker = dp, itemDate = Just (Comp.DatePicker.midOfDay date) }
|
||||||
in
|
in
|
||||||
resultModelCmd ( newModel, setDate flags newModel newModel.itemDate )
|
resultModelCmd ( newModel, setDate env.flags newModel newModel.itemDate )
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
resultModel { model | itemDatePicker = dp }
|
resultModel { model | itemDatePicker = dp }
|
||||||
|
|
||||||
RemoveDate ->
|
RemoveDate ->
|
||||||
resultModelCmd ( { model | itemDate = Nothing }, setDate flags model Nothing )
|
resultModelCmd ( { model | itemDate = Nothing }, setDate env.flags model Nothing )
|
||||||
|
|
||||||
DueDatePickerMsg m ->
|
DueDatePickerMsg m ->
|
||||||
let
|
let
|
||||||
@ -557,18 +543,18 @@ update key flags inav settings msg model =
|
|||||||
newModel =
|
newModel =
|
||||||
{ model | dueDatePicker = dp, dueDate = Just (Comp.DatePicker.midOfDay date) }
|
{ model | dueDatePicker = dp, dueDate = Just (Comp.DatePicker.midOfDay date) }
|
||||||
in
|
in
|
||||||
resultModelCmd ( newModel, setDueDate flags newModel newModel.dueDate )
|
resultModelCmd ( newModel, setDueDate env.flags newModel newModel.dueDate )
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
resultModel { model | dueDatePicker = dp }
|
resultModel { model | dueDatePicker = dp }
|
||||||
|
|
||||||
RemoveDueDate ->
|
RemoveDueDate ->
|
||||||
resultModelCmd ( { model | dueDate = Nothing }, setDueDate flags model Nothing )
|
resultModelCmd ( { model | dueDate = Nothing }, setDueDate env.flags model Nothing )
|
||||||
|
|
||||||
DeleteItemConfirmed ->
|
DeleteItemConfirmed ->
|
||||||
let
|
let
|
||||||
cmd =
|
cmd =
|
||||||
Api.deleteItem flags model.item.id (DeleteResp model.item.id)
|
Api.deleteItem env.flags model.item.id (DeleteResp model.item.id)
|
||||||
in
|
in
|
||||||
resultModelCmd ( { model | itemModal = Nothing }, cmd )
|
resultModelCmd ( { model | itemModal = Nothing }, cmd )
|
||||||
|
|
||||||
@ -583,22 +569,22 @@ update key flags inav settings msg model =
|
|||||||
}
|
}
|
||||||
|
|
||||||
SetCorrOrgSuggestion idname ->
|
SetCorrOrgSuggestion idname ->
|
||||||
resultModelCmd ( model, setCorrOrg flags model (Just idname) )
|
resultModelCmd ( model, setCorrOrg env.flags model (Just idname) )
|
||||||
|
|
||||||
SetCorrPersonSuggestion idname ->
|
SetCorrPersonSuggestion idname ->
|
||||||
resultModelCmd ( model, setCorrPerson flags model (Just idname) )
|
resultModelCmd ( model, setCorrPerson env.flags model (Just idname) )
|
||||||
|
|
||||||
SetConcPersonSuggestion idname ->
|
SetConcPersonSuggestion idname ->
|
||||||
resultModelCmd ( model, setConcPerson flags model (Just idname) )
|
resultModelCmd ( model, setConcPerson env.flags model (Just idname) )
|
||||||
|
|
||||||
SetConcEquipSuggestion idname ->
|
SetConcEquipSuggestion idname ->
|
||||||
resultModelCmd ( model, setConcEquip flags model (Just idname) )
|
resultModelCmd ( model, setConcEquip env.flags model (Just idname) )
|
||||||
|
|
||||||
SetItemDateSuggestion date ->
|
SetItemDateSuggestion date ->
|
||||||
resultModelCmd ( model, setDate flags model (Just date) )
|
resultModelCmd ( model, setDate env.flags model (Just date) )
|
||||||
|
|
||||||
SetDueDateSuggestion date ->
|
SetDueDateSuggestion date ->
|
||||||
resultModelCmd ( model, setDueDate flags model (Just date) )
|
resultModelCmd ( model, setDueDate env.flags model (Just date) )
|
||||||
|
|
||||||
GetFolderResp (Ok fs) ->
|
GetFolderResp (Ok fs) ->
|
||||||
let
|
let
|
||||||
@ -613,7 +599,7 @@ update key flags inav settings msg model =
|
|||||||
|> List.map mkIdName
|
|> List.map mkIdName
|
||||||
|> Comp.Dropdown.SetOptions
|
|> Comp.Dropdown.SetOptions
|
||||||
in
|
in
|
||||||
update key flags inav settings (FolderDropdownMsg opts) model_
|
update inav env (FolderDropdownMsg opts) model_
|
||||||
|
|
||||||
GetFolderResp (Err _) ->
|
GetFolderResp (Err _) ->
|
||||||
resultModel model
|
resultModel model
|
||||||
@ -636,7 +622,7 @@ update key flags inav settings msg model =
|
|||||||
opts =
|
opts =
|
||||||
Comp.Dropdown.SetOptions orgs.items
|
Comp.Dropdown.SetOptions orgs.items
|
||||||
in
|
in
|
||||||
update key flags inav settings (OrgDropdownMsg opts) model
|
update inav env (OrgDropdownMsg opts) model
|
||||||
|
|
||||||
GetOrgResp (Err _) ->
|
GetOrgResp (Err _) ->
|
||||||
resultModel model
|
resultModel model
|
||||||
@ -673,18 +659,14 @@ update key flags inav settings msg model =
|
|||||||
{ model | allPersons = personDict }
|
{ model | allPersons = personDict }
|
||||||
|
|
||||||
res1 =
|
res1 =
|
||||||
update key
|
update inav
|
||||||
flags
|
env
|
||||||
inav
|
|
||||||
settings
|
|
||||||
(CorrPersonMsg (Comp.Dropdown.SetOptions corrRefs))
|
(CorrPersonMsg (Comp.Dropdown.SetOptions corrRefs))
|
||||||
model_
|
model_
|
||||||
|
|
||||||
res2 =
|
res2 =
|
||||||
update key
|
update inav
|
||||||
flags
|
env
|
||||||
inav
|
|
||||||
settings
|
|
||||||
(ConcPersonMsg (Comp.Dropdown.SetOptions concRefs))
|
(ConcPersonMsg (Comp.Dropdown.SetOptions concRefs))
|
||||||
res1.model
|
res1.model
|
||||||
in
|
in
|
||||||
@ -693,6 +675,7 @@ update key flags inav settings msg model =
|
|||||||
, sub = Sub.batch [ res1.sub, res2.sub ]
|
, sub = Sub.batch [ res1.sub, res2.sub ]
|
||||||
, linkTarget = Comp.LinkTarget.LinkNone
|
, linkTarget = Comp.LinkTarget.LinkNone
|
||||||
, removedItem = Nothing
|
, removedItem = Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
GetPersonResp (Err _) ->
|
GetPersonResp (Err _) ->
|
||||||
@ -706,14 +689,14 @@ update key flags inav settings msg model =
|
|||||||
equips.items
|
equips.items
|
||||||
)
|
)
|
||||||
in
|
in
|
||||||
update key flags inav settings (ConcEquipMsg opts) model
|
update inav env (ConcEquipMsg opts) model
|
||||||
|
|
||||||
GetEquipResp (Err _) ->
|
GetEquipResp (Err _) ->
|
||||||
resultModel model
|
resultModel model
|
||||||
|
|
||||||
SaveResp (Ok res) ->
|
SaveResp (Ok res) ->
|
||||||
if res.success then
|
if res.success then
|
||||||
resultModelCmd ( model, Api.itemDetail flags model.item.id GetItemResp )
|
resultModelCmd ( model, Api.itemDetail env.flags model.item.id GetItemResp )
|
||||||
|
|
||||||
else
|
else
|
||||||
resultModel model
|
resultModel model
|
||||||
@ -742,10 +725,10 @@ update key flags inav settings msg model =
|
|||||||
result_ =
|
result_ =
|
||||||
case inav.next of
|
case inav.next of
|
||||||
Just id ->
|
Just id ->
|
||||||
resultModelCmd ( model, Page.set key (ItemDetailPage id) )
|
resultModelCmd ( model, Page.set env.key (ItemDetailPage id) )
|
||||||
|
|
||||||
Nothing ->
|
Nothing ->
|
||||||
resultModelCmd ( model, Page.set key (SearchPage Nothing) )
|
resultModelCmd ( model, Page.set env.key (SearchPage Nothing) )
|
||||||
in
|
in
|
||||||
{ result_ | removedItem = Just removedId }
|
{ result_ | removedItem = Just removedId }
|
||||||
|
|
||||||
@ -756,7 +739,7 @@ update key flags inav settings msg model =
|
|||||||
resultModel model
|
resultModel model
|
||||||
|
|
||||||
GetItemResp (Ok item) ->
|
GetItemResp (Ok item) ->
|
||||||
update key flags inav settings (SetItem item) model
|
update inav env (SetItem item) model
|
||||||
|
|
||||||
GetItemResp (Err _) ->
|
GetItemResp (Err _) ->
|
||||||
resultModel model
|
resultModel model
|
||||||
@ -770,7 +753,7 @@ update key flags inav settings msg model =
|
|||||||
ItemMailMsg m ->
|
ItemMailMsg m ->
|
||||||
let
|
let
|
||||||
( im, ic, fa ) =
|
( im, ic, fa ) =
|
||||||
Comp.ItemMail.update flags m model.itemMail
|
Comp.ItemMail.update env.flags m model.itemMail
|
||||||
in
|
in
|
||||||
case fa of
|
case fa of
|
||||||
Comp.ItemMail.FormNone ->
|
Comp.ItemMail.FormNone ->
|
||||||
@ -798,7 +781,7 @@ update key flags inav settings msg model =
|
|||||||
( { model | mailSending = True }
|
( { model | mailSending = True }
|
||||||
, Cmd.batch
|
, Cmd.batch
|
||||||
[ Cmd.map ItemMailMsg ic
|
[ Cmd.map ItemMailMsg ic
|
||||||
, Api.sendMail flags mail SendMailResp
|
, Api.sendMail env.flags mail SendMailResp
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -850,7 +833,7 @@ update key flags inav settings msg model =
|
|||||||
MailSendFailed br.message
|
MailSendFailed br.message
|
||||||
}
|
}
|
||||||
, if br.success then
|
, if br.success then
|
||||||
Api.itemDetail flags model.item.id GetItemResp
|
Api.itemDetail env.flags model.item.id GetItemResp
|
||||||
|
|
||||||
else
|
else
|
||||||
Cmd.none
|
Cmd.none
|
||||||
@ -895,7 +878,7 @@ update key flags inav settings msg model =
|
|||||||
Nothing ->
|
Nothing ->
|
||||||
let
|
let
|
||||||
( am, ac ) =
|
( am, ac ) =
|
||||||
Comp.AttachmentMeta.init flags id
|
Comp.AttachmentMeta.init env.flags id
|
||||||
|
|
||||||
nextMeta =
|
nextMeta =
|
||||||
Dict.insert id am model.attachMeta
|
Dict.insert id am model.attachMeta
|
||||||
@ -925,7 +908,7 @@ update key flags inav settings msg model =
|
|||||||
DeleteAttachConfirmed attachId ->
|
DeleteAttachConfirmed attachId ->
|
||||||
let
|
let
|
||||||
cmd =
|
cmd =
|
||||||
Api.deleteAttachment flags attachId DeleteAttachResp
|
Api.deleteAttachment env.flags attachId DeleteAttachResp
|
||||||
in
|
in
|
||||||
resultModelCmd ( { model | attachModal = Nothing }, cmd )
|
resultModelCmd ( { model | attachModal = Nothing }, cmd )
|
||||||
|
|
||||||
@ -934,7 +917,7 @@ update key flags inav settings msg model =
|
|||||||
|
|
||||||
DeleteAttachResp (Ok res) ->
|
DeleteAttachResp (Ok res) ->
|
||||||
if res.success then
|
if res.success then
|
||||||
update key flags inav settings ReloadItem model
|
update inav env ReloadItem model
|
||||||
|
|
||||||
else
|
else
|
||||||
resultModel model
|
resultModel model
|
||||||
@ -980,7 +963,7 @@ update key flags inav settings msg model =
|
|||||||
SelectView svm ->
|
SelectView svm ->
|
||||||
let
|
let
|
||||||
cmd =
|
cmd =
|
||||||
Api.deleteAttachments flags svm.ids DeleteAttachResp
|
Api.deleteAttachments env.flags svm.ids DeleteAttachResp
|
||||||
in
|
in
|
||||||
resultModelCmd ( { model | attachModal = Nothing, viewMode = SimpleView }, cmd )
|
resultModelCmd ( { model | attachModal = Nothing, viewMode = SimpleView }, cmd )
|
||||||
|
|
||||||
@ -1029,7 +1012,7 @@ update key flags inav settings msg model =
|
|||||||
List.map makeFileId model.selectedFiles
|
List.map makeFileId model.selectedFiles
|
||||||
|
|
||||||
uploads =
|
uploads =
|
||||||
Cmd.batch (Api.uploadAmend flags model.item.id model.selectedFiles AddFilesUploadResp)
|
Cmd.batch (Api.uploadAmend env.flags model.item.id model.selectedFiles AddFilesUploadResp)
|
||||||
|
|
||||||
tracker =
|
tracker =
|
||||||
Sub.batch <| List.map (\id -> Http.track id (AddFilesProgress id)) fileids
|
Sub.batch <| List.map (\id -> Http.track id (AddFilesProgress id)) fileids
|
||||||
@ -1112,7 +1095,7 @@ update key flags inav settings msg model =
|
|||||||
case result of
|
case result of
|
||||||
Just ( src, trg, _ ) ->
|
Just ( src, trg, _ ) ->
|
||||||
if src /= trg then
|
if src /= trg then
|
||||||
Api.moveAttachmentBefore flags
|
Api.moveAttachmentBefore env.flags
|
||||||
model.item.id
|
model.item.id
|
||||||
(MoveAttachment src trg)
|
(MoveAttachment src trg)
|
||||||
SaveResp
|
SaveResp
|
||||||
@ -1130,7 +1113,7 @@ update key flags inav settings msg model =
|
|||||||
Just mm ->
|
Just mm ->
|
||||||
let
|
let
|
||||||
( mm_, mc_, mv ) =
|
( mm_, mc_, mv ) =
|
||||||
Comp.DetailEdit.update flags lm mm
|
Comp.DetailEdit.update env.flags lm mm
|
||||||
|
|
||||||
( model_, cmd_ ) =
|
( model_, cmd_ ) =
|
||||||
case mv of
|
case mv of
|
||||||
@ -1138,7 +1121,7 @@ update key flags inav settings msg model =
|
|||||||
( { model | modalEdit = Nothing }, Cmd.none )
|
( { model | modalEdit = Nothing }, Cmd.none )
|
||||||
|
|
||||||
Just _ ->
|
Just _ ->
|
||||||
( model, Api.itemDetail flags model.item.id GetItemResp )
|
( model, Api.itemDetail env.flags model.item.id GetItemResp )
|
||||||
|
|
||||||
Nothing ->
|
Nothing ->
|
||||||
( { model | modalEdit = Just mm_ }, Cmd.none )
|
( { model | modalEdit = Just mm_ }, Cmd.none )
|
||||||
@ -1180,7 +1163,7 @@ update key flags inav settings msg model =
|
|||||||
Just oid ->
|
Just oid ->
|
||||||
let
|
let
|
||||||
( m, c ) =
|
( m, c ) =
|
||||||
Comp.DetailEdit.editOrg flags oid Comp.OrgForm.emptyModel
|
Comp.DetailEdit.editOrg env.flags oid Comp.OrgForm.emptyModel
|
||||||
in
|
in
|
||||||
resultModelCmd ( { model | modalEdit = Just m }, Cmd.map ModalEditMsg c )
|
resultModelCmd ( { model | modalEdit = Just m }, Cmd.map ModalEditMsg c )
|
||||||
|
|
||||||
@ -1198,7 +1181,7 @@ update key flags inav settings msg model =
|
|||||||
Just eid ->
|
Just eid ->
|
||||||
let
|
let
|
||||||
( m, c ) =
|
( m, c ) =
|
||||||
Comp.DetailEdit.editEquip flags eid Comp.EquipmentForm.emptyModel
|
Comp.DetailEdit.editEquip env.flags eid Comp.EquipmentForm.emptyModel
|
||||||
in
|
in
|
||||||
resultModelCmd ( { model | modalEdit = Just m }, Cmd.map ModalEditMsg c )
|
resultModelCmd ( { model | modalEdit = Just m }, Cmd.map ModalEditMsg c )
|
||||||
|
|
||||||
@ -1209,7 +1192,7 @@ update key flags inav settings msg model =
|
|||||||
let
|
let
|
||||||
( pm, pc ) =
|
( pm, pc ) =
|
||||||
Comp.DetailEdit.initCorrPerson
|
Comp.DetailEdit.initCorrPerson
|
||||||
flags
|
env.flags
|
||||||
model.item.id
|
model.item.id
|
||||||
Comp.PersonForm.emptyModel
|
Comp.PersonForm.emptyModel
|
||||||
in
|
in
|
||||||
@ -1222,7 +1205,7 @@ update key flags inav settings msg model =
|
|||||||
let
|
let
|
||||||
( p, c ) =
|
( p, c ) =
|
||||||
Comp.DetailEdit.initConcPerson
|
Comp.DetailEdit.initConcPerson
|
||||||
flags
|
env.flags
|
||||||
model.item.id
|
model.item.id
|
||||||
Comp.PersonForm.emptyModel
|
Comp.PersonForm.emptyModel
|
||||||
in
|
in
|
||||||
@ -1242,7 +1225,7 @@ update key flags inav settings msg model =
|
|||||||
Just pid ->
|
Just pid ->
|
||||||
let
|
let
|
||||||
( m, c ) =
|
( m, c ) =
|
||||||
Comp.DetailEdit.editPerson flags pid Comp.PersonForm.emptyModel
|
Comp.DetailEdit.editPerson env.flags pid Comp.PersonForm.emptyModel
|
||||||
in
|
in
|
||||||
resultModelCmd ( { model | modalEdit = Just m }, Cmd.map ModalEditMsg c )
|
resultModelCmd ( { model | modalEdit = Just m }, Cmd.map ModalEditMsg c )
|
||||||
|
|
||||||
@ -1318,7 +1301,7 @@ update key flags inav settings msg model =
|
|||||||
resultModelCmd
|
resultModelCmd
|
||||||
( model
|
( model
|
||||||
, Api.setAttachmentName
|
, Api.setAttachmentName
|
||||||
flags
|
env.flags
|
||||||
m.id
|
m.id
|
||||||
(Util.Maybe.fromString m.newName)
|
(Util.Maybe.fromString m.newName)
|
||||||
EditAttachNameResp
|
EditAttachNameResp
|
||||||
@ -1370,15 +1353,15 @@ update key flags inav settings msg model =
|
|||||||
in
|
in
|
||||||
if keys == Just Comp.KeyInput.ctrlC then
|
if keys == Just Comp.KeyInput.ctrlC then
|
||||||
if model.item.state == "created" then
|
if model.item.state == "created" then
|
||||||
update key flags inav settings ConfirmItem model_
|
update inav env ConfirmItem model_
|
||||||
|
|
||||||
else
|
else
|
||||||
update key flags inav settings UnconfirmItem model_
|
update inav env UnconfirmItem model_
|
||||||
|
|
||||||
else if keys == Just Comp.KeyInput.ctrlPoint then
|
else if keys == Just Comp.KeyInput.ctrlPoint then
|
||||||
case inav.next of
|
case inav.next of
|
||||||
Just id ->
|
Just id ->
|
||||||
resultModelCmd ( model_, Page.set key (ItemDetailPage id) )
|
resultModelCmd ( model_, Page.set env.key (ItemDetailPage id) )
|
||||||
|
|
||||||
Nothing ->
|
Nothing ->
|
||||||
resultModel model_
|
resultModel model_
|
||||||
@ -1386,7 +1369,7 @@ update key flags inav settings msg model =
|
|||||||
else if keys == Just Comp.KeyInput.ctrlComma then
|
else if keys == Just Comp.KeyInput.ctrlComma then
|
||||||
case inav.prev of
|
case inav.prev of
|
||||||
Just id ->
|
Just id ->
|
||||||
resultModelCmd ( model_, Page.set key (ItemDetailPage id) )
|
resultModelCmd ( model_, Page.set env.key (ItemDetailPage id) )
|
||||||
|
|
||||||
Nothing ->
|
Nothing ->
|
||||||
resultModel model_
|
resultModel model_
|
||||||
@ -1405,7 +1388,7 @@ update key flags inav settings msg model =
|
|||||||
let
|
let
|
||||||
model_ =
|
model_ =
|
||||||
{ model
|
{ model
|
||||||
| menuOpen = settings.sideMenuVisible
|
| menuOpen = env.settings.sideMenuVisible
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
resultModel model_
|
resultModel model_
|
||||||
@ -1416,12 +1399,13 @@ update key flags inav settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, linkTarget = lt
|
, linkTarget = lt
|
||||||
, removedItem = Nothing
|
, removedItem = Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
CustomFieldMsg lm ->
|
CustomFieldMsg lm ->
|
||||||
let
|
let
|
||||||
result =
|
result =
|
||||||
Comp.CustomFieldMultiInput.update flags lm model.customFieldsModel
|
Comp.CustomFieldMultiInput.update env.flags lm model.customFieldsModel
|
||||||
|
|
||||||
cmd_ =
|
cmd_ =
|
||||||
Cmd.map CustomFieldMsg result.cmd
|
Cmd.map CustomFieldMsg result.cmd
|
||||||
@ -1438,7 +1422,7 @@ update key flags inav settings msg model =
|
|||||||
( Cmd.none, model.customFieldSavingIcon )
|
( Cmd.none, model.customFieldSavingIcon )
|
||||||
|
|
||||||
FieldValueRemove field ->
|
FieldValueRemove field ->
|
||||||
( Api.deleteCustomValue flags
|
( Api.deleteCustomValue env.flags
|
||||||
model.item.id
|
model.item.id
|
||||||
field.id
|
field.id
|
||||||
(CustomFieldRemoveResp field.id)
|
(CustomFieldRemoveResp field.id)
|
||||||
@ -1446,7 +1430,7 @@ update key flags inav settings msg model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
FieldValueChange field value ->
|
FieldValueChange field value ->
|
||||||
( Api.putCustomValue flags
|
( Api.putCustomValue env.flags
|
||||||
model.item.id
|
model.item.id
|
||||||
(CustomFieldValue field.id value)
|
(CustomFieldValue field.id value)
|
||||||
(CustomFieldSaveResp field value)
|
(CustomFieldSaveResp field value)
|
||||||
@ -1497,7 +1481,7 @@ update key flags inav settings msg model =
|
|||||||
if res.success then
|
if res.success then
|
||||||
resultModelCmd
|
resultModelCmd
|
||||||
( model_
|
( model_
|
||||||
, Api.itemDetail flags model.item.id GetItemResp
|
, Api.itemDetail env.flags model.item.id GetItemResp
|
||||||
)
|
)
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -1551,7 +1535,7 @@ update key flags inav settings msg model =
|
|||||||
ReprocessFileConfirmed id ->
|
ReprocessFileConfirmed id ->
|
||||||
let
|
let
|
||||||
cmd =
|
cmd =
|
||||||
Api.reprocessItem flags model.item.id [ id ] ReprocessFileResp
|
Api.reprocessItem env.flags model.item.id [ id ] ReprocessFileResp
|
||||||
in
|
in
|
||||||
resultModelCmd ( { model | attachModal = Nothing }, cmd )
|
resultModelCmd ( { model | attachModal = Nothing }, cmd )
|
||||||
|
|
||||||
@ -1572,7 +1556,7 @@ update key flags inav settings msg model =
|
|||||||
ReprocessItemConfirmed ->
|
ReprocessItemConfirmed ->
|
||||||
let
|
let
|
||||||
cmd =
|
cmd =
|
||||||
Api.reprocessItem flags model.item.id [] ReprocessFileResp
|
Api.reprocessItem env.flags model.item.id [] ReprocessFileResp
|
||||||
in
|
in
|
||||||
resultModelCmd ( { model | itemModal = Nothing }, cmd )
|
resultModelCmd ( { model | itemModal = Nothing }, cmd )
|
||||||
|
|
||||||
@ -1594,9 +1578,9 @@ update key flags inav settings msg model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
RestoreItem ->
|
RestoreItem ->
|
||||||
resultModelCmd ( model, Api.restoreItem flags model.item.id SaveResp )
|
resultModelCmd ( model, Api.restoreItem env.flags model.item.id SaveResp )
|
||||||
|
|
||||||
ToggleShowQrItem id ->
|
ToggleShowQrItem _ ->
|
||||||
let
|
let
|
||||||
sqm =
|
sqm =
|
||||||
model.showQrModel
|
model.showQrModel
|
||||||
@ -1606,7 +1590,7 @@ update key flags inav settings msg model =
|
|||||||
in
|
in
|
||||||
resultModel { model | showQrModel = next, mobileItemMenuOpen = False }
|
resultModel { model | showQrModel = next, mobileItemMenuOpen = False }
|
||||||
|
|
||||||
ToggleShowQrAttach id ->
|
ToggleShowQrAttach _ ->
|
||||||
let
|
let
|
||||||
sqm =
|
sqm =
|
||||||
model.showQrModel
|
model.showQrModel
|
||||||
@ -1619,6 +1603,16 @@ update key flags inav settings msg model =
|
|||||||
PrintElement id ->
|
PrintElement id ->
|
||||||
resultModelCmd ( model, Ports.printElement id )
|
resultModelCmd ( model, Ports.printElement id )
|
||||||
|
|
||||||
|
ToggleSelectItem ->
|
||||||
|
let
|
||||||
|
res =
|
||||||
|
resultModel { model | mobileItemMenuOpen = False }
|
||||||
|
|
||||||
|
newSelection =
|
||||||
|
Data.ItemIds.toggle env.selectedItems model.item.id
|
||||||
|
in
|
||||||
|
{ res | selectionChange = newSelection }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--- Helper
|
--- Helper
|
||||||
|
@ -27,8 +27,10 @@ import Comp.ItemDetail.SingleAttachment
|
|||||||
import Comp.ItemMail
|
import Comp.ItemMail
|
||||||
import Comp.MenuBar as MB
|
import Comp.MenuBar as MB
|
||||||
import Comp.SentMails
|
import Comp.SentMails
|
||||||
|
import Data.Environment as Env
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Data.Icons as Icons
|
import Data.Icons as Icons
|
||||||
|
import Data.ItemIds
|
||||||
import Data.ItemNav exposing (ItemNav)
|
import Data.ItemNav exposing (ItemNav)
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
import Html exposing (..)
|
import Html exposing (..)
|
||||||
@ -39,13 +41,13 @@ import Page exposing (Page(..))
|
|||||||
import Styles as S
|
import Styles as S
|
||||||
|
|
||||||
|
|
||||||
view : Texts -> Flags -> ItemNav -> UiSettings -> Model -> Html Msg
|
view : Texts -> ItemNav -> Env.View -> Model -> Html Msg
|
||||||
view texts flags inav settings model =
|
view texts inav env model =
|
||||||
div [ class "flex flex-col h-full" ]
|
div [ class "flex flex-col h-full" ]
|
||||||
[ header texts settings inav model
|
[ header texts inav env model
|
||||||
|
|
||||||
-- , menuBar texts inav settings model
|
-- , menuBar texts inav settings model
|
||||||
, body texts flags inav settings model
|
, body texts env.flags inav env.settings model
|
||||||
, itemModal texts model
|
, itemModal texts model
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -60,25 +62,35 @@ itemModal texts model =
|
|||||||
span [ class "hidden" ] []
|
span [ class "hidden" ] []
|
||||||
|
|
||||||
|
|
||||||
header : Texts -> UiSettings -> ItemNav -> Model -> Html Msg
|
header : Texts -> ItemNav -> Env.View -> Model -> Html Msg
|
||||||
header texts settings inav model =
|
header texts inav env model =
|
||||||
div [ class "my-3" ]
|
div [ class "my-3" ]
|
||||||
[ Comp.ItemDetail.ItemInfoHeader.view texts.itemInfoHeader
|
[ Comp.ItemDetail.ItemInfoHeader.view texts.itemInfoHeader
|
||||||
settings
|
env.settings
|
||||||
model
|
model
|
||||||
(menuBar texts inav settings model)
|
(menuBar texts inav env model)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
menuBar : Texts -> ItemNav -> UiSettings -> Model -> Html Msg
|
menuBar : Texts -> ItemNav -> Env.View -> Model -> Html Msg
|
||||||
menuBar texts inav settings model =
|
menuBar texts inav env model =
|
||||||
let
|
let
|
||||||
keyDescr name =
|
keyDescr name =
|
||||||
if settings.itemDetailShortcuts && model.menuOpen then
|
if env.settings.itemDetailShortcuts && model.menuOpen then
|
||||||
" " ++ texts.key ++ "'" ++ name ++ "'."
|
" " ++ texts.key ++ "'" ++ name ++ "'."
|
||||||
|
|
||||||
else
|
else
|
||||||
""
|
""
|
||||||
|
|
||||||
|
isSelected =
|
||||||
|
Data.ItemIds.isMember env.selectedItems model.item.id
|
||||||
|
|
||||||
|
foldSelected fsel funsel =
|
||||||
|
if isSelected then
|
||||||
|
fsel
|
||||||
|
|
||||||
|
else
|
||||||
|
funsel
|
||||||
in
|
in
|
||||||
MB.view
|
MB.view
|
||||||
{ start =
|
{ start =
|
||||||
@ -210,7 +222,18 @@ menuBar texts inav settings model =
|
|||||||
, toggleMenu = ToggleMobileItemMenu
|
, toggleMenu = ToggleMobileItemMenu
|
||||||
, menuOpen = model.mobileItemMenuOpen
|
, menuOpen = model.mobileItemMenuOpen
|
||||||
, items =
|
, items =
|
||||||
[ { icon = i [ class "fa fa-envelope font-thin" ] []
|
[ { icon =
|
||||||
|
foldSelected
|
||||||
|
(i [ class "fa fa-check-square dark:text-lime-400 text-lime-600" ] [])
|
||||||
|
(i [ class "fa fa-tasks" ] [])
|
||||||
|
, label = foldSelected texts.deselectItem texts.selectItem
|
||||||
|
, disabled = False
|
||||||
|
, attrs =
|
||||||
|
[ href "#"
|
||||||
|
, onClick ToggleSelectItem
|
||||||
|
]
|
||||||
|
}
|
||||||
|
, { icon = i [ class "fa fa-envelope font-thin" ] []
|
||||||
, label = texts.sendMail
|
, label = texts.sendMail
|
||||||
, disabled = False
|
, disabled = False
|
||||||
, attrs =
|
, attrs =
|
||||||
@ -281,13 +304,28 @@ menuBar texts inav settings model =
|
|||||||
]
|
]
|
||||||
, end =
|
, end =
|
||||||
[ MB.CustomElement <|
|
[ MB.CustomElement <|
|
||||||
|
a
|
||||||
|
[ href "#"
|
||||||
|
, onClick ToggleSelectItem
|
||||||
|
, title (foldSelected texts.deselectItem texts.selectItem)
|
||||||
|
, class "hidden md:flex flex-row items-center h-full "
|
||||||
|
, classList
|
||||||
|
[ ( S.greenButton, isSelected )
|
||||||
|
, ( S.secondaryBasicButton, not isSelected )
|
||||||
|
]
|
||||||
|
]
|
||||||
|
[ foldSelected
|
||||||
|
(i [ class "fa fa-square-check" ] [])
|
||||||
|
(i [ class "fa fa-list-check" ] [])
|
||||||
|
]
|
||||||
|
, MB.CustomElement <|
|
||||||
a
|
a
|
||||||
[ class S.secondaryBasicButton
|
[ class S.secondaryBasicButton
|
||||||
, href "#"
|
, href "#"
|
||||||
, onClick UnconfirmItem
|
, onClick UnconfirmItem
|
||||||
, title texts.unconfirmItemMetadata
|
, title texts.unconfirmItemMetadata
|
||||||
, classList [ ( "hidden", model.item.state == "created" ) ]
|
, class "hidden"
|
||||||
, class "hidden md:block"
|
, classList [ ( "md:block", model.item.state /= "created" ) ]
|
||||||
]
|
]
|
||||||
[ i [ class "fa fa-eye-slash font-thin" ] []
|
[ i [ class "fa fa-eye-slash font-thin" ] []
|
||||||
]
|
]
|
||||||
|
@ -19,6 +19,7 @@ module Comp.SearchMenu exposing
|
|||||||
, linkTargetMsg
|
, linkTargetMsg
|
||||||
, refreshBookmarks
|
, refreshBookmarks
|
||||||
, setFromStats
|
, setFromStats
|
||||||
|
, setIncludeSelection
|
||||||
, textSearchString
|
, textSearchString
|
||||||
, update
|
, update
|
||||||
, updateDrop
|
, updateDrop
|
||||||
@ -52,6 +53,7 @@ import Data.EquipmentOrder
|
|||||||
import Data.EquipmentUse
|
import Data.EquipmentUse
|
||||||
import Data.Fields
|
import Data.Fields
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
|
import Data.ItemIds exposing (ItemIdChange, ItemIds)
|
||||||
import Data.ItemQuery as Q exposing (ItemQuery)
|
import Data.ItemQuery as Q exposing (ItemQuery)
|
||||||
import Data.PersonOrder
|
import Data.PersonOrder
|
||||||
import Data.PersonUse
|
import Data.PersonUse
|
||||||
@ -102,6 +104,7 @@ type alias Model =
|
|||||||
, sourceModel : Maybe String
|
, sourceModel : Maybe String
|
||||||
, allBookmarks : Comp.BookmarkChooser.Model
|
, allBookmarks : Comp.BookmarkChooser.Model
|
||||||
, selectedBookmarks : Comp.BookmarkChooser.Selection
|
, selectedBookmarks : Comp.BookmarkChooser.Selection
|
||||||
|
, includeSelection : Bool
|
||||||
, openTabs : Set String
|
, openTabs : Set String
|
||||||
, searchMode : SearchMode
|
, searchMode : SearchMode
|
||||||
}
|
}
|
||||||
@ -149,6 +152,7 @@ init flags =
|
|||||||
, sourceModel = Nothing
|
, sourceModel = Nothing
|
||||||
, allBookmarks = Comp.BookmarkChooser.init Data.Bookmarks.empty
|
, allBookmarks = Comp.BookmarkChooser.init Data.Bookmarks.empty
|
||||||
, selectedBookmarks = Comp.BookmarkChooser.emptySelection
|
, selectedBookmarks = Comp.BookmarkChooser.emptySelection
|
||||||
|
, includeSelection = False
|
||||||
, openTabs = Set.fromList [ "Tags", "Inbox" ]
|
, openTabs = Set.fromList [ "Tags", "Inbox" ]
|
||||||
, searchMode = Data.SearchMode.Normal
|
, searchMode = Data.SearchMode.Normal
|
||||||
}
|
}
|
||||||
@ -222,8 +226,8 @@ isNamesSearch model =
|
|||||||
True
|
True
|
||||||
|
|
||||||
|
|
||||||
getItemQuery : Model -> Maybe ItemQuery
|
getItemQuery : ItemIds -> Model -> Maybe ItemQuery
|
||||||
getItemQuery model =
|
getItemQuery selectedItems model =
|
||||||
let
|
let
|
||||||
when flag body =
|
when flag body =
|
||||||
if flag then
|
if flag then
|
||||||
@ -258,6 +262,11 @@ getItemQuery model =
|
|||||||
in
|
in
|
||||||
Q.and
|
Q.and
|
||||||
[ when model.inboxCheckbox (Q.Inbox True)
|
[ when model.inboxCheckbox (Q.Inbox True)
|
||||||
|
, if model.includeSelection then
|
||||||
|
Data.ItemIds.toQuery selectedItems
|
||||||
|
|
||||||
|
else
|
||||||
|
Nothing
|
||||||
, whenNotEmpty (model.tagSelection.includeTags |> Set.toList)
|
, whenNotEmpty (model.tagSelection.includeTags |> Set.toList)
|
||||||
(Q.TagIds Q.AllMatch)
|
(Q.TagIds Q.AllMatch)
|
||||||
, whenNotEmpty (model.tagSelection.excludeTags |> Set.toList)
|
, whenNotEmpty (model.tagSelection.excludeTags |> Set.toList)
|
||||||
@ -347,6 +356,7 @@ resetModel model =
|
|||||||
, customValues = Data.CustomFieldChange.emptyCollect
|
, customValues = Data.CustomFieldChange.emptyCollect
|
||||||
, sourceModel = Nothing
|
, sourceModel = Nothing
|
||||||
, selectedBookmarks = Comp.BookmarkChooser.emptySelection
|
, selectedBookmarks = Comp.BookmarkChooser.emptySelection
|
||||||
|
, includeSelection = False
|
||||||
, searchMode = Data.SearchMode.Normal
|
, searchMode = Data.SearchMode.Normal
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -397,6 +407,8 @@ type Msg
|
|||||||
| ToggleOpenAllAkkordionTabs
|
| ToggleOpenAllAkkordionTabs
|
||||||
| AllBookmarksResp (Result Http.Error AllBookmarks)
|
| AllBookmarksResp (Result Http.Error AllBookmarks)
|
||||||
| SelectBookmarkMsg Comp.BookmarkChooser.Msg
|
| SelectBookmarkMsg Comp.BookmarkChooser.Msg
|
||||||
|
| SetIncludeSelection Bool
|
||||||
|
| ClearSelection
|
||||||
|
|
||||||
|
|
||||||
setFromStats : SearchStats -> Msg
|
setFromStats : SearchStats -> Msg
|
||||||
@ -409,6 +421,11 @@ initFromStats stats =
|
|||||||
GetAllTagsResp (Ok stats)
|
GetAllTagsResp (Ok stats)
|
||||||
|
|
||||||
|
|
||||||
|
setIncludeSelection : Bool -> Msg
|
||||||
|
setIncludeSelection flag =
|
||||||
|
SetIncludeSelection flag
|
||||||
|
|
||||||
|
|
||||||
linkTargetMsg : LinkTarget -> Maybe Msg
|
linkTargetMsg : LinkTarget -> Maybe Msg
|
||||||
linkTargetMsg linkTarget =
|
linkTargetMsg linkTarget =
|
||||||
case linkTarget of
|
case linkTarget of
|
||||||
@ -449,6 +466,7 @@ type alias NextState =
|
|||||||
, sub : Sub Msg
|
, sub : Sub Msg
|
||||||
, stateChange : Bool
|
, stateChange : Bool
|
||||||
, dragDrop : DD.DragDropData
|
, dragDrop : DD.DragDropData
|
||||||
|
, selectionChange : ItemIdChange
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -483,6 +501,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = True
|
, stateChange = True
|
||||||
, dragDrop = set.dragDrop
|
, dragDrop = set.dragDrop
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
case msg of
|
case msg of
|
||||||
@ -525,6 +544,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
ResetForm ->
|
ResetForm ->
|
||||||
@ -533,6 +553,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = True
|
, stateChange = True
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SetCorrOrg id ->
|
SetCorrOrg id ->
|
||||||
@ -555,6 +576,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SetConcEquip id ->
|
SetConcEquip id ->
|
||||||
@ -586,6 +608,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = sel /= model.selectedBookmarks
|
, stateChange = sel /= model.selectedBookmarks
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
GetAllTagsResp (Ok stats) ->
|
GetAllTagsResp (Ok stats) ->
|
||||||
@ -600,6 +623,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
GetAllTagsResp (Err _) ->
|
GetAllTagsResp (Err _) ->
|
||||||
@ -608,6 +632,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
GetStatsResp (Ok stats) ->
|
GetStatsResp (Ok stats) ->
|
||||||
@ -676,6 +701,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
GetStatsResp (Err _) ->
|
GetStatsResp (Err _) ->
|
||||||
@ -684,6 +710,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
GetEquipResp (Ok equips) ->
|
GetEquipResp (Ok equips) ->
|
||||||
@ -699,6 +726,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
GetOrgResp (Ok orgs) ->
|
GetOrgResp (Ok orgs) ->
|
||||||
@ -714,6 +742,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
GetPersonResp (Ok ps) ->
|
GetPersonResp (Ok ps) ->
|
||||||
@ -749,6 +778,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
TagSelectMsg m ->
|
TagSelectMsg m ->
|
||||||
@ -765,6 +795,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = sel /= model.tagSelection
|
, stateChange = sel /= model.tagSelection
|
||||||
, dragDrop = ddd
|
, dragDrop = ddd
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
DirectionMsg m ->
|
DirectionMsg m ->
|
||||||
@ -777,6 +808,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = isDropdownChangeMsg m
|
, stateChange = isDropdownChangeMsg m
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
OrgMsg m ->
|
OrgMsg m ->
|
||||||
@ -789,6 +821,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = isDropdownChangeMsg m
|
, stateChange = isDropdownChangeMsg m
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
CorrPersonMsg m ->
|
CorrPersonMsg m ->
|
||||||
@ -801,6 +834,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = isDropdownChangeMsg m
|
, stateChange = isDropdownChangeMsg m
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
ConcPersonMsg m ->
|
ConcPersonMsg m ->
|
||||||
@ -813,6 +847,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = isDropdownChangeMsg m
|
, stateChange = isDropdownChangeMsg m
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
ConcEquipmentMsg m ->
|
ConcEquipmentMsg m ->
|
||||||
@ -825,6 +860,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = isDropdownChangeMsg m
|
, stateChange = isDropdownChangeMsg m
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
ToggleInbox ->
|
ToggleInbox ->
|
||||||
@ -837,6 +873,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = True
|
, stateChange = True
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
ToggleSearchMode ->
|
ToggleSearchMode ->
|
||||||
@ -856,6 +893,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = True
|
, stateChange = True
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
FromDateMsg m ->
|
FromDateMsg m ->
|
||||||
@ -876,6 +914,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = model.fromDate /= nextDate
|
, stateChange = model.fromDate /= nextDate
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
UntilDateMsg m ->
|
UntilDateMsg m ->
|
||||||
@ -896,6 +935,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = model.untilDate /= nextDate
|
, stateChange = model.untilDate /= nextDate
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
FromDueDateMsg m ->
|
FromDueDateMsg m ->
|
||||||
@ -916,6 +956,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = model.fromDueDate /= nextDate
|
, stateChange = model.fromDueDate /= nextDate
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
UntilDueDateMsg m ->
|
UntilDueDateMsg m ->
|
||||||
@ -936,6 +977,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = model.untilDueDate /= nextDate
|
, stateChange = model.untilDueDate /= nextDate
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SetName str ->
|
SetName str ->
|
||||||
@ -948,6 +990,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SetTextSearch str ->
|
SetTextSearch str ->
|
||||||
@ -956,6 +999,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SwapTextSearch ->
|
SwapTextSearch ->
|
||||||
@ -965,6 +1009,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -973,6 +1018,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SetFulltextSearch ->
|
SetFulltextSearch ->
|
||||||
@ -983,6 +1029,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
Names s ->
|
Names s ->
|
||||||
@ -991,6 +1038,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SetNamesSearch ->
|
SetNamesSearch ->
|
||||||
@ -1001,6 +1049,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
Names _ ->
|
Names _ ->
|
||||||
@ -1009,6 +1058,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
KeyUpMsg (Just Enter) ->
|
KeyUpMsg (Just Enter) ->
|
||||||
@ -1017,6 +1067,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = True
|
, stateChange = True
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
KeyUpMsg _ ->
|
KeyUpMsg _ ->
|
||||||
@ -1025,6 +1076,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
FolderSelectMsg lm ->
|
FolderSelectMsg lm ->
|
||||||
@ -1041,6 +1093,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = model.selectedFolder /= sel
|
, stateChange = model.selectedFolder /= sel
|
||||||
, dragDrop = ddd
|
, dragDrop = ddd
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
CustomFieldMsg lm ->
|
CustomFieldMsg lm ->
|
||||||
@ -1058,6 +1111,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, stateChange =
|
, stateChange =
|
||||||
Data.CustomFieldChange.isValueChange res.result
|
Data.CustomFieldChange.isValueChange res.result
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SetCustomField cv ->
|
SetCustomField cv ->
|
||||||
@ -1086,6 +1140,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
ResetToSource str ->
|
ResetToSource str ->
|
||||||
@ -1105,6 +1160,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
ToggleOpenAllAkkordionTabs ->
|
ToggleOpenAllAkkordionTabs ->
|
||||||
@ -1125,6 +1181,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
AllBookmarksResp (Ok bm) ->
|
AllBookmarksResp (Ok bm) ->
|
||||||
@ -1133,6 +1190,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = model.allBookmarks /= Comp.BookmarkChooser.init bm
|
, stateChange = model.allBookmarks /= Comp.BookmarkChooser.init bm
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
AllBookmarksResp (Err _) ->
|
AllBookmarksResp (Err _) ->
|
||||||
@ -1141,6 +1199,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = False
|
, stateChange = False
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
}
|
}
|
||||||
|
|
||||||
SelectBookmarkMsg lm ->
|
SelectBookmarkMsg lm ->
|
||||||
@ -1153,6 +1212,26 @@ updateDrop ddm flags settings msg model =
|
|||||||
, sub = Sub.none
|
, sub = Sub.none
|
||||||
, stateChange = sel /= model.selectedBookmarks || model.allBookmarks /= next
|
, stateChange = sel /= model.selectedBookmarks || model.allBookmarks /= next
|
||||||
, dragDrop = DD.DragDropData ddm Nothing
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
|
}
|
||||||
|
|
||||||
|
SetIncludeSelection flag ->
|
||||||
|
{ model =
|
||||||
|
{ model | includeSelection = flag }
|
||||||
|
, cmd = Cmd.none
|
||||||
|
, sub = Sub.none
|
||||||
|
, stateChange = True
|
||||||
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.noChange
|
||||||
|
}
|
||||||
|
|
||||||
|
ClearSelection ->
|
||||||
|
{ model = { model | includeSelection = False }
|
||||||
|
, cmd = Cmd.none
|
||||||
|
, sub = Sub.none
|
||||||
|
, stateChange = True
|
||||||
|
, dragDrop = DD.DragDropData ddm Nothing
|
||||||
|
, selectionChange = Data.ItemIds.clearAll
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1162,6 +1241,7 @@ updateDrop ddm flags settings msg model =
|
|||||||
|
|
||||||
type alias ViewConfig =
|
type alias ViewConfig =
|
||||||
{ overrideTabLook : SearchTab -> Comp.Tabs.Look -> Comp.Tabs.Look
|
{ overrideTabLook : SearchTab -> Comp.Tabs.Look -> Comp.Tabs.Look
|
||||||
|
, selectedItems : ItemIds
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1174,7 +1254,7 @@ viewDrop2 texts ddd flags cfg settings model =
|
|||||||
Comp.Tabs.akkordion
|
Comp.Tabs.akkordion
|
||||||
akkordionStyle
|
akkordionStyle
|
||||||
(searchTabState settings cfg model)
|
(searchTabState settings cfg model)
|
||||||
(searchTabs texts ddd flags settings model)
|
(searchTabs texts ddd flags settings cfg.selectedItems model)
|
||||||
|
|
||||||
|
|
||||||
type SearchTab
|
type SearchTab
|
||||||
@ -1191,6 +1271,7 @@ type SearchTab
|
|||||||
| TabSource
|
| TabSource
|
||||||
| TabDirection
|
| TabDirection
|
||||||
| TabTrashed
|
| TabTrashed
|
||||||
|
| TabSelection
|
||||||
|
|
||||||
|
|
||||||
allTabs : List SearchTab
|
allTabs : List SearchTab
|
||||||
@ -1208,6 +1289,7 @@ allTabs =
|
|||||||
, TabSource
|
, TabSource
|
||||||
, TabDirection
|
, TabDirection
|
||||||
, TabTrashed
|
, TabTrashed
|
||||||
|
, TabSelection
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -1253,6 +1335,9 @@ tabName tab =
|
|||||||
TabTrashed ->
|
TabTrashed ->
|
||||||
"trashed"
|
"trashed"
|
||||||
|
|
||||||
|
TabSelection ->
|
||||||
|
"selection"
|
||||||
|
|
||||||
|
|
||||||
findTab : Comp.Tabs.Tab msg -> Maybe SearchTab
|
findTab : Comp.Tabs.Tab msg -> Maybe SearchTab
|
||||||
findTab tab =
|
findTab tab =
|
||||||
@ -1296,12 +1381,15 @@ findTab tab =
|
|||||||
"trashed" ->
|
"trashed" ->
|
||||||
Just TabTrashed
|
Just TabTrashed
|
||||||
|
|
||||||
|
"selection" ->
|
||||||
|
Just TabSelection
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
Nothing
|
Nothing
|
||||||
|
|
||||||
|
|
||||||
tabLook : UiSettings -> Model -> SearchTab -> Comp.Tabs.Look
|
tabLook : UiSettings -> ItemIds -> Model -> SearchTab -> Comp.Tabs.Look
|
||||||
tabLook settings model tab =
|
tabLook settings selectedItems model tab =
|
||||||
let
|
let
|
||||||
isHidden f =
|
isHidden f =
|
||||||
Data.UiSettings.fieldHidden settings f
|
Data.UiSettings.fieldHidden settings f
|
||||||
@ -1396,6 +1484,16 @@ tabLook settings model tab =
|
|||||||
TabTrashed ->
|
TabTrashed ->
|
||||||
activeWhen (model.searchMode == Data.SearchMode.Trashed)
|
activeWhen (model.searchMode == Data.SearchMode.Trashed)
|
||||||
|
|
||||||
|
TabSelection ->
|
||||||
|
if Data.ItemIds.isEmpty selectedItems then
|
||||||
|
Comp.Tabs.Hidden
|
||||||
|
|
||||||
|
else if model.includeSelection then
|
||||||
|
Comp.Tabs.Active
|
||||||
|
|
||||||
|
else
|
||||||
|
Comp.Tabs.Normal
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
Comp.Tabs.Normal
|
Comp.Tabs.Normal
|
||||||
|
|
||||||
@ -1416,15 +1514,15 @@ searchTabState settings cfg model tab =
|
|||||||
state =
|
state =
|
||||||
{ folded = folded
|
{ folded = folded
|
||||||
, look =
|
, look =
|
||||||
Maybe.map (\t -> tabLook settings model t |> cfg.overrideTabLook t) searchTab
|
Maybe.map (\t -> tabLook settings cfg.selectedItems model t |> cfg.overrideTabLook t) searchTab
|
||||||
|> Maybe.withDefault Comp.Tabs.Normal
|
|> Maybe.withDefault Comp.Tabs.Normal
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
( state, ToggleAkkordionTab tab.name )
|
( state, ToggleAkkordionTab tab.name )
|
||||||
|
|
||||||
|
|
||||||
searchTabs : Texts -> DD.DragDropData -> Flags -> UiSettings -> Model -> List (Comp.Tabs.Tab Msg)
|
searchTabs : Texts -> DD.DragDropData -> Flags -> UiSettings -> ItemIds -> Model -> List (Comp.Tabs.Tab Msg)
|
||||||
searchTabs texts ddd flags settings model =
|
searchTabs texts ddd flags settings selectedItems model =
|
||||||
let
|
let
|
||||||
isHidden f =
|
isHidden f =
|
||||||
Data.UiSettings.fieldHidden settings f
|
Data.UiSettings.fieldHidden settings f
|
||||||
@ -1477,6 +1575,40 @@ searchTabs texts ddd flags settings model =
|
|||||||
(Comp.BookmarkChooser.view texts.bookmarkChooser model.allBookmarks model.selectedBookmarks)
|
(Comp.BookmarkChooser.view texts.bookmarkChooser model.allBookmarks model.selectedBookmarks)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
, { name = tabName TabSelection
|
||||||
|
, title = texts.selection
|
||||||
|
, titleRight =
|
||||||
|
[ span [ class "flex items-center rounded-full bg-blue-100 dark:bg-sky-600 text-xs px-2 py-0.5 " ]
|
||||||
|
[ text (String.fromInt (Data.ItemIds.size selectedItems)) ]
|
||||||
|
]
|
||||||
|
, info = Nothing
|
||||||
|
, body =
|
||||||
|
[ div [ class "flex flex-col ml-1" ]
|
||||||
|
[ a
|
||||||
|
[ class "flex flex-row items-center"
|
||||||
|
, class "rounded px-1 py-1 hover:bg-blue-100 dark:hover:bg-slate-600"
|
||||||
|
, href "#"
|
||||||
|
, Html.Events.onClick (SetIncludeSelection (not model.includeSelection))
|
||||||
|
]
|
||||||
|
[ if model.includeSelection then
|
||||||
|
i [ class "fa fa-check mr-2" ] []
|
||||||
|
|
||||||
|
else
|
||||||
|
i [ class "fa fa-list-check mr-2" ] []
|
||||||
|
, text texts.showSelection
|
||||||
|
]
|
||||||
|
, a
|
||||||
|
[ class "flex flex-row items-center"
|
||||||
|
, class "rounded px-1 py-1 hover:bg-blue-100 dark:hover:bg-slate-600"
|
||||||
|
, href "#"
|
||||||
|
, Html.Events.onClick ClearSelection
|
||||||
|
]
|
||||||
|
[ i [ class "fa fa-times mr-2" ] []
|
||||||
|
, text texts.clearSelection
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
, { name = tabName TabTags
|
, { name = tabName TabTags
|
||||||
, title = texts.basics.tags
|
, title = texts.basics.tags
|
||||||
, titleRight = []
|
, titleRight = []
|
||||||
|
29
modules/webapp/src/main/elm/Data/Environment.elm
Normal file
29
modules/webapp/src/main/elm/Data/Environment.elm
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{-
|
||||||
|
Copyright 2020 Eike K. & Contributors
|
||||||
|
|
||||||
|
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
-}
|
||||||
|
|
||||||
|
|
||||||
|
module Data.Environment exposing (..)
|
||||||
|
|
||||||
|
import Browser.Navigation as Nav
|
||||||
|
import Data.Flags exposing (Flags)
|
||||||
|
import Data.ItemIds exposing (ItemIds)
|
||||||
|
import Data.UiSettings exposing (UiSettings)
|
||||||
|
|
||||||
|
|
||||||
|
type alias Update =
|
||||||
|
{ key : Nav.Key
|
||||||
|
, selectedItems : ItemIds
|
||||||
|
, flags : Flags
|
||||||
|
, settings : UiSettings
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type alias View =
|
||||||
|
{ flags : Flags
|
||||||
|
, sidebarVisible : Bool
|
||||||
|
, settings : UiSettings
|
||||||
|
, selectedItems : ItemIds
|
||||||
|
}
|
154
modules/webapp/src/main/elm/Data/ItemIds.elm
Normal file
154
modules/webapp/src/main/elm/Data/ItemIds.elm
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
{-
|
||||||
|
Copyright 2020 Eike K. & Contributors
|
||||||
|
|
||||||
|
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
-}
|
||||||
|
|
||||||
|
|
||||||
|
module Data.ItemIds exposing
|
||||||
|
( ItemIdChange
|
||||||
|
, ItemIds
|
||||||
|
, apply
|
||||||
|
, clearAll
|
||||||
|
, combine
|
||||||
|
, combineAll
|
||||||
|
, deselect
|
||||||
|
, empty
|
||||||
|
, fromSet
|
||||||
|
, isEmpty
|
||||||
|
, isMember
|
||||||
|
, noChange
|
||||||
|
, nonEmpty
|
||||||
|
, select
|
||||||
|
, selectAll
|
||||||
|
, size
|
||||||
|
, toList
|
||||||
|
, toQuery
|
||||||
|
, toggle
|
||||||
|
, union
|
||||||
|
)
|
||||||
|
|
||||||
|
import Data.ItemQuery exposing (ItemQuery)
|
||||||
|
import Set exposing (Set)
|
||||||
|
|
||||||
|
|
||||||
|
type ItemIds
|
||||||
|
= ItemIds (Set String)
|
||||||
|
|
||||||
|
|
||||||
|
empty : ItemIds
|
||||||
|
empty =
|
||||||
|
ItemIds Set.empty
|
||||||
|
|
||||||
|
|
||||||
|
isEmpty : ItemIds -> Bool
|
||||||
|
isEmpty (ItemIds ids) =
|
||||||
|
Set.isEmpty ids
|
||||||
|
|
||||||
|
|
||||||
|
nonEmpty : ItemIds -> Bool
|
||||||
|
nonEmpty ids =
|
||||||
|
not (isEmpty ids)
|
||||||
|
|
||||||
|
|
||||||
|
isMember : ItemIds -> String -> Bool
|
||||||
|
isMember (ItemIds ids) id =
|
||||||
|
Set.member id ids
|
||||||
|
|
||||||
|
|
||||||
|
size : ItemIds -> Int
|
||||||
|
size (ItemIds ids) =
|
||||||
|
Set.size ids
|
||||||
|
|
||||||
|
|
||||||
|
fromSet : Set String -> ItemIds
|
||||||
|
fromSet ids =
|
||||||
|
ItemIds ids
|
||||||
|
|
||||||
|
|
||||||
|
union : ItemIds -> ItemIds -> ItemIds
|
||||||
|
union (ItemIds ids1) (ItemIds ids2) =
|
||||||
|
ItemIds (Set.union ids1 ids2)
|
||||||
|
|
||||||
|
|
||||||
|
toList : ItemIds -> List String
|
||||||
|
toList (ItemIds ids) =
|
||||||
|
Set.toList ids
|
||||||
|
|
||||||
|
|
||||||
|
toQuery : ItemIds -> Maybe ItemQuery
|
||||||
|
toQuery (ItemIds ids) =
|
||||||
|
if Set.isEmpty ids then
|
||||||
|
Nothing
|
||||||
|
|
||||||
|
else
|
||||||
|
Just <| Data.ItemQuery.ItemIdIn (Set.toList ids)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--- Change item ids
|
||||||
|
|
||||||
|
|
||||||
|
type ItemIdChange
|
||||||
|
= ItemIdChange
|
||||||
|
{ remove : Set String
|
||||||
|
, add : Set String
|
||||||
|
, clear : Bool
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
apply : ItemIds -> ItemIdChange -> ItemIds
|
||||||
|
apply (ItemIds ids) (ItemIdChange { remove, add, clear }) =
|
||||||
|
if clear then
|
||||||
|
empty
|
||||||
|
|
||||||
|
else
|
||||||
|
ItemIds (Set.diff ids remove |> Set.union add)
|
||||||
|
|
||||||
|
|
||||||
|
noChange : ItemIdChange
|
||||||
|
noChange =
|
||||||
|
ItemIdChange { remove = Set.empty, add = Set.empty, clear = False }
|
||||||
|
|
||||||
|
|
||||||
|
combine : ItemIdChange -> ItemIdChange -> ItemIdChange
|
||||||
|
combine (ItemIdChange c1) (ItemIdChange c2) =
|
||||||
|
ItemIdChange
|
||||||
|
{ remove = Set.union c1.remove c2.remove
|
||||||
|
, add = Set.union c1.add c2.add
|
||||||
|
, clear = False
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
combineAll : List ItemIdChange -> ItemIdChange
|
||||||
|
combineAll all =
|
||||||
|
List.foldl combine noChange all
|
||||||
|
|
||||||
|
|
||||||
|
select : String -> ItemIdChange
|
||||||
|
select id =
|
||||||
|
ItemIdChange { add = Set.singleton id, remove = Set.empty, clear = False }
|
||||||
|
|
||||||
|
|
||||||
|
selectAll : Set String -> ItemIdChange
|
||||||
|
selectAll ids =
|
||||||
|
ItemIdChange { add = ids, remove = Set.empty, clear = False }
|
||||||
|
|
||||||
|
|
||||||
|
deselect : String -> ItemIdChange
|
||||||
|
deselect id =
|
||||||
|
ItemIdChange { add = Set.empty, remove = Set.singleton id, clear = False }
|
||||||
|
|
||||||
|
|
||||||
|
clearAll : ItemIdChange
|
||||||
|
clearAll =
|
||||||
|
ItemIdChange { add = Set.empty, remove = Set.empty, clear = True }
|
||||||
|
|
||||||
|
|
||||||
|
toggle : ItemIds -> String -> ItemIdChange
|
||||||
|
toggle ids id =
|
||||||
|
if isMember ids id then
|
||||||
|
deselect id
|
||||||
|
|
||||||
|
else
|
||||||
|
select id
|
@ -11,12 +11,12 @@ module Data.ItemSelection exposing
|
|||||||
, isSelected
|
, isSelected
|
||||||
)
|
)
|
||||||
|
|
||||||
import Set exposing (Set)
|
import Data.ItemIds exposing (ItemIds)
|
||||||
|
|
||||||
|
|
||||||
type ItemSelection
|
type ItemSelection
|
||||||
= Inactive
|
= Inactive
|
||||||
| Active (Set String)
|
| Active ItemIds
|
||||||
|
|
||||||
|
|
||||||
isSelected : String -> ItemSelection -> Bool
|
isSelected : String -> ItemSelection -> Bool
|
||||||
@ -26,7 +26,7 @@ isSelected id set =
|
|||||||
False
|
False
|
||||||
|
|
||||||
Active ids ->
|
Active ids ->
|
||||||
Set.member id ids
|
Data.ItemIds.isMember ids id
|
||||||
|
|
||||||
|
|
||||||
isActive : ItemSelection -> Bool
|
isActive : ItemSelection -> Bool
|
||||||
|
@ -57,6 +57,8 @@ type alias Texts =
|
|||||||
, mailSendSuccessful : String
|
, mailSendSuccessful : String
|
||||||
, showQrCode : String
|
, showQrCode : String
|
||||||
, close : String
|
, close : String
|
||||||
|
, selectItem : String
|
||||||
|
, deselectItem : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -93,6 +95,8 @@ gb =
|
|||||||
, mailSendSuccessful = "Mail sent."
|
, mailSendSuccessful = "Mail sent."
|
||||||
, showQrCode = "Show URL as QR code"
|
, showQrCode = "Show URL as QR code"
|
||||||
, close = "Close"
|
, close = "Close"
|
||||||
|
, selectItem = "Select this item"
|
||||||
|
, deselectItem = "Deselect this item"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -115,7 +119,7 @@ de =
|
|||||||
, addMoreFiles = "Diesem Dokument weitere Dateien anfügen"
|
, addMoreFiles = "Diesem Dokument weitere Dateien anfügen"
|
||||||
, confirmItemMetadata = "Metadaten bestätigen"
|
, confirmItemMetadata = "Metadaten bestätigen"
|
||||||
, confirm = "Bestätige"
|
, confirm = "Bestätige"
|
||||||
, unconfirmItemMetadata = "Widerrufe"
|
, unconfirmItemMetadata = "Widerrufe Bestätigung"
|
||||||
, reprocessItem = "Das Dokument erneut verarbeiten"
|
, reprocessItem = "Das Dokument erneut verarbeiten"
|
||||||
, deleteThisItem = "Das Dokument löschen"
|
, deleteThisItem = "Das Dokument löschen"
|
||||||
, undeleteThisItem = "Das Dokument wiederherstellen"
|
, undeleteThisItem = "Das Dokument wiederherstellen"
|
||||||
@ -129,4 +133,6 @@ de =
|
|||||||
, mailSendSuccessful = "E-Mail wurde versendet."
|
, mailSendSuccessful = "E-Mail wurde versendet."
|
||||||
, showQrCode = "Link als QR code anzeigen"
|
, showQrCode = "Link als QR code anzeigen"
|
||||||
, close = "Schließen"
|
, close = "Schließen"
|
||||||
|
, selectItem = "Zur Auswahl hinzufügen"
|
||||||
|
, deselectItem = "Aus Auswahl entfernen"
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ de =
|
|||||||
, chooseDirection = "Wähle eine Richtung…"
|
, chooseDirection = "Wähle eine Richtung…"
|
||||||
, confirmUnconfirm = "Bestätige/Widerrufe Metadaten"
|
, confirmUnconfirm = "Bestätige/Widerrufe Metadaten"
|
||||||
, confirm = "Bestätige"
|
, confirm = "Bestätige"
|
||||||
, unconfirm = "Widerrufe"
|
, unconfirm = "Widerrufe Bestätigung"
|
||||||
, changeTagMode = "Wechsel den Änderungsmodus für Tags"
|
, changeTagMode = "Wechsel den Änderungsmodus für Tags"
|
||||||
, dueDateTab = "Fälligkeitsdatum"
|
, dueDateTab = "Fälligkeitsdatum"
|
||||||
, direction = Messages.Data.Direction.de
|
, direction = Messages.Data.Direction.de
|
||||||
|
@ -50,6 +50,9 @@ type alias Texts =
|
|||||||
, direction : Direction -> String
|
, direction : Direction -> String
|
||||||
, trashcan : String
|
, trashcan : String
|
||||||
, bookmarks : String
|
, bookmarks : String
|
||||||
|
, selection : String
|
||||||
|
, showSelection : String
|
||||||
|
, clearSelection : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -84,6 +87,9 @@ gb =
|
|||||||
, direction = Messages.Data.Direction.gb
|
, direction = Messages.Data.Direction.gb
|
||||||
, trashcan = "Trash"
|
, trashcan = "Trash"
|
||||||
, bookmarks = "Bookmarks"
|
, bookmarks = "Bookmarks"
|
||||||
|
, selection = "Selection"
|
||||||
|
, showSelection = "Show selection"
|
||||||
|
, clearSelection = "Clear selection"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -118,4 +124,7 @@ de =
|
|||||||
, direction = Messages.Data.Direction.de
|
, direction = Messages.Data.Direction.de
|
||||||
, trashcan = "Papierkorb"
|
, trashcan = "Papierkorb"
|
||||||
, bookmarks = "Bookmarks"
|
, bookmarks = "Bookmarks"
|
||||||
|
, selection = "Auswahl"
|
||||||
|
, showSelection = "Auswahl anzeigen"
|
||||||
|
, clearSelection = "Auswahl aufheben"
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@ import Browser.Dom as Dom
|
|||||||
import Comp.ItemDetail
|
import Comp.ItemDetail
|
||||||
import Comp.ItemDetail.Model
|
import Comp.ItemDetail.Model
|
||||||
import Comp.LinkTarget exposing (LinkTarget)
|
import Comp.LinkTarget exposing (LinkTarget)
|
||||||
|
import Data.ItemIds exposing (ItemIds)
|
||||||
import Http
|
import Http
|
||||||
|
|
||||||
|
|
||||||
@ -45,4 +46,5 @@ type alias UpdateResult =
|
|||||||
, sub : Sub Msg
|
, sub : Sub Msg
|
||||||
, linkTarget : LinkTarget
|
, linkTarget : LinkTarget
|
||||||
, removedItem : Maybe String
|
, removedItem : Maybe String
|
||||||
|
, selectedItems : ItemIds
|
||||||
}
|
}
|
||||||
|
@ -8,29 +8,26 @@
|
|||||||
module Page.ItemDetail.Update exposing (update)
|
module Page.ItemDetail.Update exposing (update)
|
||||||
|
|
||||||
import Api
|
import Api
|
||||||
import Browser.Navigation as Nav
|
|
||||||
import Comp.ItemDetail
|
import Comp.ItemDetail
|
||||||
import Comp.ItemDetail.Model
|
import Comp.ItemDetail.Model
|
||||||
import Comp.LinkTarget
|
import Comp.LinkTarget
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Environment as Env
|
||||||
|
import Data.ItemIds
|
||||||
import Data.ItemNav exposing (ItemNav)
|
import Data.ItemNav exposing (ItemNav)
|
||||||
import Data.UiSettings exposing (UiSettings)
|
|
||||||
import Page exposing (Page(..))
|
import Page exposing (Page(..))
|
||||||
import Page.ItemDetail.Data exposing (Model, Msg(..), UpdateResult)
|
import Page.ItemDetail.Data exposing (Model, Msg(..), UpdateResult)
|
||||||
import Scroll
|
import Scroll
|
||||||
import Task
|
import Task
|
||||||
|
|
||||||
|
|
||||||
update : Nav.Key -> Flags -> ItemNav -> UiSettings -> Msg -> Model -> UpdateResult
|
update : ItemNav -> Env.Update -> Msg -> Model -> UpdateResult
|
||||||
update key flags inav settings msg model =
|
update inav env msg model =
|
||||||
case msg of
|
case msg of
|
||||||
Init id ->
|
Init id ->
|
||||||
let
|
let
|
||||||
result =
|
result =
|
||||||
Comp.ItemDetail.update key
|
Comp.ItemDetail.update inav
|
||||||
flags
|
env
|
||||||
inav
|
|
||||||
settings
|
|
||||||
Comp.ItemDetail.Model.Init
|
Comp.ItemDetail.Model.Init
|
||||||
model.detail
|
model.detail
|
||||||
|
|
||||||
@ -40,19 +37,20 @@ update key flags inav settings msg model =
|
|||||||
{ model = { model | detail = result.model }
|
{ model = { model | detail = result.model }
|
||||||
, cmd =
|
, cmd =
|
||||||
Cmd.batch
|
Cmd.batch
|
||||||
[ Api.itemDetail flags id ItemResp
|
[ Api.itemDetail env.flags id ItemResp
|
||||||
, Cmd.map ItemDetailMsg result.cmd
|
, Cmd.map ItemDetailMsg result.cmd
|
||||||
, Task.attempt ScrollResult task
|
, Task.attempt ScrollResult task
|
||||||
]
|
]
|
||||||
, sub = Sub.map ItemDetailMsg result.sub
|
, sub = Sub.map ItemDetailMsg result.sub
|
||||||
, linkTarget = result.linkTarget
|
, linkTarget = result.linkTarget
|
||||||
, removedItem = result.removedItem
|
, removedItem = result.removedItem
|
||||||
|
, selectedItems = env.selectedItems
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemDetailMsg lmsg ->
|
ItemDetailMsg lmsg ->
|
||||||
let
|
let
|
||||||
result =
|
result =
|
||||||
Comp.ItemDetail.update key flags inav settings lmsg model.detail
|
Comp.ItemDetail.update inav env lmsg model.detail
|
||||||
|
|
||||||
pageSwitch =
|
pageSwitch =
|
||||||
case result.linkTarget of
|
case result.linkTarget of
|
||||||
@ -60,13 +58,14 @@ update key flags inav settings msg model =
|
|||||||
Cmd.none
|
Cmd.none
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
Page.set key (SearchPage Nothing)
|
Page.set env.key (SearchPage Nothing)
|
||||||
in
|
in
|
||||||
{ model = { model | detail = result.model }
|
{ model = { model | detail = result.model }
|
||||||
, cmd = Cmd.batch [ pageSwitch, Cmd.map ItemDetailMsg result.cmd ]
|
, cmd = Cmd.batch [ pageSwitch, Cmd.map ItemDetailMsg result.cmd ]
|
||||||
, sub = Sub.map ItemDetailMsg result.sub
|
, sub = Sub.map ItemDetailMsg result.sub
|
||||||
, linkTarget = result.linkTarget
|
, linkTarget = result.linkTarget
|
||||||
, removedItem = result.removedItem
|
, removedItem = result.removedItem
|
||||||
|
, selectedItems = Data.ItemIds.apply env.selectedItems result.selectionChange
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemResp (Ok item) ->
|
ItemResp (Ok item) ->
|
||||||
@ -74,17 +73,28 @@ update key flags inav settings msg model =
|
|||||||
lmsg =
|
lmsg =
|
||||||
Comp.ItemDetail.Model.SetItem item
|
Comp.ItemDetail.Model.SetItem item
|
||||||
in
|
in
|
||||||
update key flags inav settings (ItemDetailMsg lmsg) model
|
update inav env (ItemDetailMsg lmsg) model
|
||||||
|
|
||||||
ItemResp (Err _) ->
|
ItemResp (Err _) ->
|
||||||
UpdateResult model Cmd.none Sub.none Comp.LinkTarget.LinkNone Nothing
|
unit env model
|
||||||
|
|
||||||
ScrollResult _ ->
|
ScrollResult _ ->
|
||||||
UpdateResult model Cmd.none Sub.none Comp.LinkTarget.LinkNone Nothing
|
unit env model
|
||||||
|
|
||||||
UiSettingsUpdated ->
|
UiSettingsUpdated ->
|
||||||
let
|
let
|
||||||
lmsg =
|
lmsg =
|
||||||
ItemDetailMsg Comp.ItemDetail.Model.UiSettingsUpdated
|
ItemDetailMsg Comp.ItemDetail.Model.UiSettingsUpdated
|
||||||
in
|
in
|
||||||
update key flags inav settings lmsg model
|
update inav env lmsg model
|
||||||
|
|
||||||
|
|
||||||
|
unit : Env.Update -> Model -> UpdateResult
|
||||||
|
unit env model =
|
||||||
|
{ model = model
|
||||||
|
, cmd = Cmd.none
|
||||||
|
, sub = Sub.none
|
||||||
|
, linkTarget = Comp.LinkTarget.LinkNone
|
||||||
|
, removedItem = Nothing
|
||||||
|
, selectedItems = env.selectedItems
|
||||||
|
}
|
||||||
|
@ -12,6 +12,7 @@ import Comp.ItemDetail
|
|||||||
import Comp.ItemDetail.EditForm
|
import Comp.ItemDetail.EditForm
|
||||||
import Comp.ItemDetail.Model
|
import Comp.ItemDetail.Model
|
||||||
import Comp.MenuBar as MB
|
import Comp.MenuBar as MB
|
||||||
|
import Data.Environment as Env
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Data.ItemNav exposing (ItemNav)
|
import Data.ItemNav exposing (ItemNav)
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
@ -23,13 +24,13 @@ import Page.ItemDetail.Data exposing (..)
|
|||||||
import Styles as S
|
import Styles as S
|
||||||
|
|
||||||
|
|
||||||
viewSidebar : Texts -> Bool -> Flags -> UiSettings -> Model -> Html Msg
|
viewSidebar : Texts -> Env.View -> Model -> Html Msg
|
||||||
viewSidebar texts visible flags settings model =
|
viewSidebar texts env model =
|
||||||
div
|
div
|
||||||
[ id "sidebar"
|
[ id "sidebar"
|
||||||
, class S.sidebar
|
, class S.sidebar
|
||||||
, class S.sidebarBg
|
, class S.sidebarBg
|
||||||
, classList [ ( "hidden", not visible ) ]
|
, classList [ ( "hidden", not env.sidebarVisible ) ]
|
||||||
]
|
]
|
||||||
[ div
|
[ div
|
||||||
[ class S.header2
|
[ class S.header2
|
||||||
@ -57,16 +58,16 @@ viewSidebar texts visible flags settings model =
|
|||||||
, sticky = True
|
, sticky = True
|
||||||
}
|
}
|
||||||
, Html.map ItemDetailMsg
|
, Html.map ItemDetailMsg
|
||||||
(Comp.ItemDetail.EditForm.view2 texts.editForm flags settings model.detail)
|
(Comp.ItemDetail.EditForm.view2 texts.editForm env.flags env.settings model.detail)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
viewContent : Texts -> ItemNav -> Flags -> UiSettings -> Model -> Html Msg
|
viewContent : Texts -> ItemNav -> Env.View -> Model -> Html Msg
|
||||||
viewContent texts inav flags settings model =
|
viewContent texts inav env model =
|
||||||
div
|
div
|
||||||
[ id "content"
|
[ id "content"
|
||||||
, class S.content
|
, class S.content
|
||||||
]
|
]
|
||||||
[ Html.map ItemDetailMsg
|
[ Html.map ItemDetailMsg
|
||||||
(Comp.ItemDetail.view2 texts.itemDetail flags inav settings model.detail)
|
(Comp.ItemDetail.view2 texts.itemDetail inav env model.detail)
|
||||||
]
|
]
|
||||||
|
@ -42,6 +42,7 @@ import Comp.PublishItems
|
|||||||
import Comp.SearchMenu
|
import Comp.SearchMenu
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Data.ItemArrange exposing (ItemArrange)
|
import Data.ItemArrange exposing (ItemArrange)
|
||||||
|
import Data.ItemIds exposing (ItemIds)
|
||||||
import Data.ItemNav exposing (ItemNav)
|
import Data.ItemNav exposing (ItemNav)
|
||||||
import Data.ItemQuery as Q
|
import Data.ItemQuery as Q
|
||||||
import Data.Items
|
import Data.Items
|
||||||
@ -84,8 +85,7 @@ type ConfirmModalValue
|
|||||||
|
|
||||||
|
|
||||||
type alias SelectViewModel =
|
type alias SelectViewModel =
|
||||||
{ ids : Set String
|
{ action : SelectActionMode
|
||||||
, action : SelectActionMode
|
|
||||||
, confirmModal : Maybe ConfirmModalValue
|
, confirmModal : Maybe ConfirmModalValue
|
||||||
, editModel : Comp.ItemDetail.MultiEditMenu.Model
|
, editModel : Comp.ItemDetail.MultiEditMenu.Model
|
||||||
, mergeModel : Comp.ItemMerge.Model
|
, mergeModel : Comp.ItemMerge.Model
|
||||||
@ -97,8 +97,7 @@ type alias SelectViewModel =
|
|||||||
|
|
||||||
initSelectViewModel : Flags -> SelectViewModel
|
initSelectViewModel : Flags -> SelectViewModel
|
||||||
initSelectViewModel flags =
|
initSelectViewModel flags =
|
||||||
{ ids = Set.empty
|
{ action = NoneAction
|
||||||
, action = NoneAction
|
|
||||||
, confirmModal = Nothing
|
, confirmModal = Nothing
|
||||||
, editModel = Comp.ItemDetail.MultiEditMenu.init
|
, editModel = Comp.ItemDetail.MultiEditMenu.init
|
||||||
, mergeModel = Comp.ItemMerge.init []
|
, mergeModel = Comp.ItemMerge.init []
|
||||||
@ -235,6 +234,7 @@ type Msg
|
|||||||
| ToggleExpandCollapseRows
|
| ToggleExpandCollapseRows
|
||||||
| ToggleBookmarkCurrentQueryView
|
| ToggleBookmarkCurrentQueryView
|
||||||
| BookmarkQueryMsg Comp.BookmarkQueryManage.Msg
|
| BookmarkQueryMsg Comp.BookmarkQueryManage.Msg
|
||||||
|
| ItemSelectionChanged
|
||||||
|
|
||||||
|
|
||||||
type SearchType
|
type SearchType
|
||||||
@ -258,6 +258,7 @@ type alias SearchParam =
|
|||||||
, pageSize : Int
|
, pageSize : Int
|
||||||
, offset : Int
|
, offset : Int
|
||||||
, scroll : Bool
|
, scroll : Bool
|
||||||
|
, selectedItems : ItemIds
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -276,7 +277,7 @@ doSearchDefaultCmd param model =
|
|||||||
let
|
let
|
||||||
smask =
|
smask =
|
||||||
Q.request model.searchMenuModel.searchMode <|
|
Q.request model.searchMenuModel.searchMode <|
|
||||||
createQuery model
|
createQuery param.selectedItems model
|
||||||
|
|
||||||
mask =
|
mask =
|
||||||
{ smask
|
{ smask
|
||||||
@ -294,10 +295,10 @@ doSearchDefaultCmd param model =
|
|||||||
Api.itemSearch param.flags mask ItemSearchAddResp
|
Api.itemSearch param.flags mask ItemSearchAddResp
|
||||||
|
|
||||||
|
|
||||||
createQuery : Model -> Maybe Q.ItemQuery
|
createQuery : ItemIds -> Model -> Maybe Q.ItemQuery
|
||||||
createQuery model =
|
createQuery selectedItems model =
|
||||||
Q.and
|
Q.and
|
||||||
[ Comp.SearchMenu.getItemQuery model.searchMenuModel
|
[ Comp.SearchMenu.getItemQuery selectedItems model.searchMenuModel
|
||||||
, Maybe.map Q.Fragment (Comp.PowerSearchInput.getSearchString model.powerSearchInput)
|
, Maybe.map Q.Fragment (Comp.PowerSearchInput.getSearchString model.powerSearchInput)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ import Comp.Basic as B
|
|||||||
import Comp.ItemDetail.MultiEditMenu
|
import Comp.ItemDetail.MultiEditMenu
|
||||||
import Comp.MenuBar as MB
|
import Comp.MenuBar as MB
|
||||||
import Comp.SearchMenu
|
import Comp.SearchMenu
|
||||||
|
import Data.Environment as Env
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
import Html exposing (..)
|
import Html exposing (..)
|
||||||
@ -22,8 +23,8 @@ import Set
|
|||||||
import Styles as S
|
import Styles as S
|
||||||
|
|
||||||
|
|
||||||
view : Texts -> Flags -> UiSettings -> Model -> Html Msg
|
view : Texts -> Env.View -> Model -> Html Msg
|
||||||
view texts flags settings model =
|
view texts env model =
|
||||||
div
|
div
|
||||||
[ class "flex flex-col"
|
[ class "flex flex-col"
|
||||||
]
|
]
|
||||||
@ -56,19 +57,19 @@ view texts flags settings model =
|
|||||||
SelectView svm ->
|
SelectView svm ->
|
||||||
case svm.action of
|
case svm.action of
|
||||||
EditSelected ->
|
EditSelected ->
|
||||||
viewEditMenu texts flags svm settings
|
viewEditMenu texts env.flags svm env.settings
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
viewSearch texts flags settings model
|
viewSearch texts env model
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
viewSearch texts flags settings model
|
viewSearch texts env model
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
viewSearch : Texts -> Flags -> UiSettings -> Model -> List (Html Msg)
|
viewSearch : Texts -> Env.View -> Model -> List (Html Msg)
|
||||||
viewSearch texts flags settings model =
|
viewSearch texts env model =
|
||||||
[ MB.viewSide
|
[ MB.viewSide
|
||||||
{ start =
|
{ start =
|
||||||
[ MB.CustomElement <|
|
[ MB.CustomElement <|
|
||||||
@ -87,14 +88,15 @@ viewSearch texts flags settings model =
|
|||||||
, let
|
, let
|
||||||
searchMenuCfg =
|
searchMenuCfg =
|
||||||
{ overrideTabLook = \_ -> identity
|
{ overrideTabLook = \_ -> identity
|
||||||
|
, selectedItems = env.selectedItems
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
Html.map SearchMenuMsg
|
Html.map SearchMenuMsg
|
||||||
(Comp.SearchMenu.viewDrop2 texts.searchMenu
|
(Comp.SearchMenu.viewDrop2 texts.searchMenu
|
||||||
model.dragDropData
|
model.dragDropData
|
||||||
flags
|
env.flags
|
||||||
searchMenuCfg
|
searchMenuCfg
|
||||||
settings
|
env.settings
|
||||||
model.searchMenuModel
|
model.searchMenuModel
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -18,9 +18,11 @@ import Comp.PowerSearchInput
|
|||||||
import Comp.PublishItems
|
import Comp.PublishItems
|
||||||
import Comp.SearchMenu
|
import Comp.SearchMenu
|
||||||
import Comp.SearchStatsView
|
import Comp.SearchStatsView
|
||||||
|
import Data.Environment as Env
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Data.Icons as Icons
|
import Data.Icons as Icons
|
||||||
import Data.ItemArrange
|
import Data.ItemArrange
|
||||||
|
import Data.ItemIds exposing (ItemIds)
|
||||||
import Data.ItemSelection
|
import Data.ItemSelection
|
||||||
import Data.SearchMode
|
import Data.SearchMode
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
@ -36,27 +38,27 @@ import Styles as S
|
|||||||
import Util.Html
|
import Util.Html
|
||||||
|
|
||||||
|
|
||||||
viewSidebar : Texts -> Bool -> Flags -> UiSettings -> Model -> Html Msg
|
viewSidebar : Texts -> Env.View -> Model -> Html Msg
|
||||||
viewSidebar texts visible flags settings model =
|
viewSidebar texts env model =
|
||||||
div
|
div
|
||||||
[ id "sidebar"
|
[ id "sidebar"
|
||||||
, class S.sidebar
|
, class S.sidebar
|
||||||
, class S.sidebarBg
|
, class S.sidebarBg
|
||||||
, classList [ ( "hidden", not visible ) ]
|
, classList [ ( "hidden", not env.sidebarVisible ) ]
|
||||||
]
|
]
|
||||||
[ Page.Search.SideMenu.view texts.sideMenu flags settings model
|
[ Page.Search.SideMenu.view texts.sideMenu env model
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
viewContent : Texts -> Flags -> UiSettings -> Model -> Html Msg
|
viewContent : Texts -> Env.View -> Model -> Html Msg
|
||||||
viewContent texts flags settings model =
|
viewContent texts env model =
|
||||||
div
|
div
|
||||||
[ id "item-card-list" -- this id is used in scroll-to-card
|
[ id "item-card-list" -- this id is used in scroll-to-card
|
||||||
, class S.content
|
, class S.content
|
||||||
]
|
]
|
||||||
(searchStats texts flags settings model
|
(searchStats texts env.flags env.settings model
|
||||||
++ itemsBar texts flags settings model
|
++ itemsBar texts env model
|
||||||
++ mainView texts flags settings model
|
++ mainView texts env model
|
||||||
++ confirmModal texts model
|
++ confirmModal texts model
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -65,8 +67,8 @@ viewContent texts flags settings model =
|
|||||||
--- Helpers
|
--- Helpers
|
||||||
|
|
||||||
|
|
||||||
mainView : Texts -> Flags -> UiSettings -> Model -> List (Html Msg)
|
mainView : Texts -> Env.View -> Model -> List (Html Msg)
|
||||||
mainView texts flags settings model =
|
mainView texts env model =
|
||||||
let
|
let
|
||||||
otherView =
|
otherView =
|
||||||
case model.viewMode of
|
case model.viewMode of
|
||||||
@ -75,13 +77,13 @@ mainView texts flags settings model =
|
|||||||
MergeSelected ->
|
MergeSelected ->
|
||||||
Just
|
Just
|
||||||
[ div [ class "sm:relative mb-2" ]
|
[ div [ class "sm:relative mb-2" ]
|
||||||
(itemMergeView texts settings svm)
|
(itemMergeView texts env.settings svm)
|
||||||
]
|
]
|
||||||
|
|
||||||
PublishSelected ->
|
PublishSelected ->
|
||||||
Just
|
Just
|
||||||
[ div [ class "sm:relative mb-2" ]
|
[ div [ class "sm:relative mb-2" ]
|
||||||
(itemPublishView texts settings flags svm)
|
(itemPublishView texts env.settings env.flags svm)
|
||||||
]
|
]
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
@ -90,7 +92,7 @@ mainView texts flags settings model =
|
|||||||
PublishView pm ->
|
PublishView pm ->
|
||||||
Just
|
Just
|
||||||
[ div [ class "sm:relative mb-2" ]
|
[ div [ class "sm:relative mb-2" ]
|
||||||
(publishResults texts settings flags model pm)
|
(publishResults texts env.settings env.flags model pm)
|
||||||
]
|
]
|
||||||
|
|
||||||
SearchView ->
|
SearchView ->
|
||||||
@ -101,8 +103,8 @@ mainView texts flags settings model =
|
|||||||
body
|
body
|
||||||
|
|
||||||
Nothing ->
|
Nothing ->
|
||||||
bookmarkQueryWidget texts settings flags model
|
bookmarkQueryWidget texts env.settings env.flags model
|
||||||
++ itemCardList texts flags settings model
|
++ itemCardList texts env model
|
||||||
|
|
||||||
|
|
||||||
bookmarkQueryWidget : Texts -> UiSettings -> Flags -> Model -> List (Html Msg)
|
bookmarkQueryWidget : Texts -> UiSettings -> Flags -> Model -> List (Html Msg)
|
||||||
@ -182,21 +184,21 @@ confirmModal texts model =
|
|||||||
[]
|
[]
|
||||||
|
|
||||||
|
|
||||||
itemsBar : Texts -> Flags -> UiSettings -> Model -> List (Html Msg)
|
itemsBar : Texts -> Env.View -> Model -> List (Html Msg)
|
||||||
itemsBar texts flags settings model =
|
itemsBar texts env model =
|
||||||
case model.viewMode of
|
case model.viewMode of
|
||||||
SearchView ->
|
SearchView ->
|
||||||
[ defaultMenuBar texts flags settings model ]
|
[ defaultMenuBar texts env model ]
|
||||||
|
|
||||||
SelectView svm ->
|
SelectView svm ->
|
||||||
[ editMenuBar texts model svm ]
|
[ editMenuBar texts model env.selectedItems svm ]
|
||||||
|
|
||||||
PublishView _ ->
|
PublishView _ ->
|
||||||
[ defaultMenuBar texts flags settings model ]
|
[ defaultMenuBar texts env model ]
|
||||||
|
|
||||||
|
|
||||||
defaultMenuBar : Texts -> Flags -> UiSettings -> Model -> Html Msg
|
defaultMenuBar : Texts -> Env.View -> Model -> Html Msg
|
||||||
defaultMenuBar texts flags settings model =
|
defaultMenuBar texts env model =
|
||||||
let
|
let
|
||||||
btnStyle =
|
btnStyle =
|
||||||
S.secondaryBasicButton ++ " text-sm"
|
S.secondaryBasicButton ++ " text-sm"
|
||||||
@ -224,7 +226,7 @@ defaultMenuBar texts flags settings model =
|
|||||||
|> Maybe.withDefault (value "")
|
|> Maybe.withDefault (value "")
|
||||||
, class (String.replace "rounded" "" S.textInput)
|
, class (String.replace "rounded" "" S.textInput)
|
||||||
, class "py-2 text-sm"
|
, class "py-2 text-sm"
|
||||||
, if flags.config.fullTextSearchEnabled then
|
, if env.flags.config.fullTextSearchEnabled then
|
||||||
class " border-r-0 rounded-l"
|
class " border-r-0 rounded-l"
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -235,7 +237,7 @@ defaultMenuBar texts flags settings model =
|
|||||||
[ class S.secondaryBasicButtonPlain
|
[ class S.secondaryBasicButtonPlain
|
||||||
, class "text-sm px-4 py-2 border rounded-r"
|
, class "text-sm px-4 py-2 border rounded-r"
|
||||||
, classList
|
, classList
|
||||||
[ ( "hidden", not flags.config.fullTextSearchEnabled )
|
[ ( "hidden", not env.flags.config.fullTextSearchEnabled )
|
||||||
]
|
]
|
||||||
, href "#"
|
, href "#"
|
||||||
, onClick ToggleSearchType
|
, onClick ToggleSearchType
|
||||||
@ -258,10 +260,10 @@ defaultMenuBar texts flags settings model =
|
|||||||
]
|
]
|
||||||
|
|
||||||
isCardView =
|
isCardView =
|
||||||
settings.itemSearchArrange == Data.ItemArrange.Cards
|
env.settings.itemSearchArrange == Data.ItemArrange.Cards
|
||||||
|
|
||||||
isListView =
|
isListView =
|
||||||
settings.itemSearchArrange == Data.ItemArrange.List
|
env.settings.itemSearchArrange == Data.ItemArrange.List
|
||||||
|
|
||||||
menuSep =
|
menuSep =
|
||||||
{ icon = i [] []
|
{ icon = i [] []
|
||||||
@ -274,7 +276,7 @@ defaultMenuBar texts flags settings model =
|
|||||||
MB.view
|
MB.view
|
||||||
{ start =
|
{ start =
|
||||||
[ MB.CustomElement <|
|
[ MB.CustomElement <|
|
||||||
if settings.powerSearchEnabled then
|
if env.settings.powerSearchEnabled then
|
||||||
powerSearchBar
|
powerSearchBar
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -314,7 +316,7 @@ defaultMenuBar texts flags settings model =
|
|||||||
, menuOpen = model.viewMenuOpen
|
, menuOpen = model.viewMenuOpen
|
||||||
, items =
|
, items =
|
||||||
[ { icon =
|
[ { icon =
|
||||||
if settings.itemSearchShowGroups then
|
if env.settings.itemSearchShowGroups then
|
||||||
i [ class "fa fa-check-square font-thin" ] []
|
i [ class "fa fa-check-square font-thin" ] []
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -368,16 +370,16 @@ defaultMenuBar texts flags settings model =
|
|||||||
, menuSep
|
, menuSep
|
||||||
, { label = texts.shareResults
|
, { label = texts.shareResults
|
||||||
, icon = Icons.shareIcon ""
|
, icon = Icons.shareIcon ""
|
||||||
, disabled = createQuery model == Nothing
|
, disabled = createQuery env.selectedItems model == Nothing
|
||||||
, attrs =
|
, attrs =
|
||||||
[ title <|
|
[ title <|
|
||||||
if createQuery model == Nothing then
|
if createQuery env.selectedItems model == Nothing then
|
||||||
texts.nothingSelectedToShare
|
texts.nothingSelectedToShare
|
||||||
|
|
||||||
else
|
else
|
||||||
texts.publishCurrentQueryTitle
|
texts.publishCurrentQueryTitle
|
||||||
, href "#"
|
, href "#"
|
||||||
, if createQuery model == Nothing then
|
, if createQuery env.selectedItems model == Nothing then
|
||||||
class ""
|
class ""
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -386,16 +388,16 @@ defaultMenuBar texts flags settings model =
|
|||||||
}
|
}
|
||||||
, { label = texts.bookmarkQuery
|
, { label = texts.bookmarkQuery
|
||||||
, icon = i [ class "fa fa-bookmark" ] []
|
, icon = i [ class "fa fa-bookmark" ] []
|
||||||
, disabled = createQuery model == Nothing
|
, disabled = createQuery env.selectedItems model == Nothing
|
||||||
, attrs =
|
, attrs =
|
||||||
[ title <|
|
[ title <|
|
||||||
if createQuery model == Nothing then
|
if createQuery env.selectedItems model == Nothing then
|
||||||
texts.nothingToBookmark
|
texts.nothingToBookmark
|
||||||
|
|
||||||
else
|
else
|
||||||
texts.bookmarkQuery
|
texts.bookmarkQuery
|
||||||
, href "#"
|
, href "#"
|
||||||
, if createQuery model == Nothing then
|
, if createQuery env.selectedItems model == Nothing then
|
||||||
class ""
|
class ""
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -403,7 +405,7 @@ defaultMenuBar texts flags settings model =
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
, { label =
|
, { label =
|
||||||
if settings.cardPreviewFullWidth then
|
if env.settings.cardPreviewFullWidth then
|
||||||
texts.fullHeightPreviewTitle
|
texts.fullHeightPreviewTitle
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -415,7 +417,7 @@ defaultMenuBar texts flags settings model =
|
|||||||
, onClick TogglePreviewFullWidth
|
, onClick TogglePreviewFullWidth
|
||||||
, classList
|
, classList
|
||||||
[ ( "hidden sm:inline-block", False )
|
[ ( "hidden sm:inline-block", False )
|
||||||
, ( "bg-gray-200 dark:bg-slate-600", settings.cardPreviewFullWidth )
|
, ( "bg-gray-200 dark:bg-slate-600", env.settings.cardPreviewFullWidth )
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -427,11 +429,11 @@ defaultMenuBar texts flags settings model =
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
editMenuBar : Texts -> Model -> SelectViewModel -> Html Msg
|
editMenuBar : Texts -> Model -> ItemIds -> SelectViewModel -> Html Msg
|
||||||
editMenuBar texts model svm =
|
editMenuBar texts model selectedItems svm =
|
||||||
let
|
let
|
||||||
selectCount =
|
selectCount =
|
||||||
Set.size svm.ids
|
Data.ItemIds.size selectedItems
|
||||||
|
|
||||||
btnStyle =
|
btnStyle =
|
||||||
S.secondaryBasicButton ++ " text-sm"
|
S.secondaryBasicButton ++ " text-sm"
|
||||||
@ -565,8 +567,8 @@ searchStats texts _ settings model =
|
|||||||
[]
|
[]
|
||||||
|
|
||||||
|
|
||||||
itemCardList : Texts -> Flags -> UiSettings -> Model -> List (Html Msg)
|
itemCardList : Texts -> Env.View -> Model -> List (Html Msg)
|
||||||
itemCardList texts flags settings model =
|
itemCardList texts env model =
|
||||||
let
|
let
|
||||||
previewUrl attach =
|
previewUrl attach =
|
||||||
Api.attachmentPreviewURL attach.id
|
Api.attachmentPreviewURL attach.id
|
||||||
@ -581,15 +583,15 @@ itemCardList texts flags settings model =
|
|||||||
, previewUrlFallback = previewUrlFallback
|
, previewUrlFallback = previewUrlFallback
|
||||||
, attachUrl = .id >> Api.fileURL
|
, attachUrl = .id >> Api.fileURL
|
||||||
, detailPage = .id >> ItemDetailPage
|
, detailPage = .id >> ItemDetailPage
|
||||||
, arrange = settings.itemSearchArrange
|
, arrange = env.settings.itemSearchArrange
|
||||||
, showGroups = settings.itemSearchShowGroups
|
, showGroups = env.settings.itemSearchShowGroups
|
||||||
, rowOpen = \id -> Set.member "all" model.itemRowsOpen || Set.member id model.itemRowsOpen
|
, rowOpen = \id -> Set.member "all" model.itemRowsOpen || Set.member id model.itemRowsOpen
|
||||||
}
|
}
|
||||||
|
|
||||||
itemViewCfg =
|
itemViewCfg =
|
||||||
case model.viewMode of
|
case model.viewMode of
|
||||||
SelectView svm ->
|
SelectView _ ->
|
||||||
viewCfg (Data.ItemSelection.Active svm.ids)
|
viewCfg (Data.ItemSelection.Active env.selectedItems)
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
viewCfg Data.ItemSelection.Inactive
|
viewCfg Data.ItemSelection.Inactive
|
||||||
@ -597,11 +599,11 @@ itemCardList texts flags settings model =
|
|||||||
[ Html.map ItemCardListMsg
|
[ Html.map ItemCardListMsg
|
||||||
(Comp.ItemCardList.view texts.itemCardList
|
(Comp.ItemCardList.view texts.itemCardList
|
||||||
itemViewCfg
|
itemViewCfg
|
||||||
settings
|
env.settings
|
||||||
flags
|
env.flags
|
||||||
model.itemListModel
|
model.itemListModel
|
||||||
)
|
)
|
||||||
, loadMore texts settings model
|
, loadMore texts env.settings model
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ module Page.Share.Sidebar exposing (..)
|
|||||||
import Comp.SearchMenu
|
import Comp.SearchMenu
|
||||||
import Comp.Tabs
|
import Comp.Tabs
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
|
import Data.ItemIds
|
||||||
import Html exposing (..)
|
import Html exposing (..)
|
||||||
import Html.Attributes exposing (..)
|
import Html.Attributes exposing (..)
|
||||||
import Messages.Page.Share exposing (Texts)
|
import Messages.Page.Share exposing (Texts)
|
||||||
@ -30,6 +31,7 @@ view texts flags model =
|
|||||||
|
|
||||||
searchMenuCfg =
|
searchMenuCfg =
|
||||||
{ overrideTabLook = hideTrashTab
|
{ overrideTabLook = hideTrashTab
|
||||||
|
, selectedItems = Data.ItemIds.empty
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
div
|
div
|
||||||
|
@ -14,6 +14,7 @@ import Comp.PowerSearchInput
|
|||||||
import Comp.SearchMenu
|
import Comp.SearchMenu
|
||||||
import Comp.SharePasswordForm
|
import Comp.SharePasswordForm
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
|
import Data.ItemIds
|
||||||
import Data.ItemQuery as Q
|
import Data.ItemQuery as Q
|
||||||
import Data.SearchMode
|
import Data.SearchMode
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
@ -262,7 +263,7 @@ makeSearchCmd flags doInit model =
|
|||||||
let
|
let
|
||||||
xq =
|
xq =
|
||||||
Q.and
|
Q.and
|
||||||
[ Comp.SearchMenu.getItemQuery model.searchMenuModel
|
[ Comp.SearchMenu.getItemQuery Data.ItemIds.empty model.searchMenuModel
|
||||||
, Maybe.map Q.Fragment <|
|
, Maybe.map Q.Fragment <|
|
||||||
case model.searchMode of
|
case model.searchMode of
|
||||||
SearchBarNormal ->
|
SearchBarNormal ->
|
||||||
|
@ -189,6 +189,26 @@ secondaryButtonHover =
|
|||||||
" hover:bg-gray-400 dark:hover:bg-slate-300 "
|
" hover:bg-gray-400 dark:hover:bg-slate-300 "
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--- Secondary Basic Button
|
||||||
|
|
||||||
|
|
||||||
|
secondaryBasicButtonNoColor : String
|
||||||
|
secondaryBasicButtonNoColor =
|
||||||
|
" my-auto whitespace-nowrap text-center shadow-none focus:outline-none focus:ring focus:ring-opacity-75 "
|
||||||
|
|
||||||
|
|
||||||
|
secondaryBasicButtonMain : String
|
||||||
|
secondaryBasicButtonMain =
|
||||||
|
secondaryBasicButtonNoColor
|
||||||
|
++ " border-gray-500 dark:border-slate-500 text-gray-500 dark:text-slate-400 "
|
||||||
|
|
||||||
|
|
||||||
|
secondaryBasicButtonHover : String
|
||||||
|
secondaryBasicButtonHover =
|
||||||
|
" hover:bg-gray-600 hover:text-white dark:hover:text-white dark:hover:bg-slate-500 dark:hover:text-slate-100 "
|
||||||
|
|
||||||
|
|
||||||
secondaryBasicButton : String
|
secondaryBasicButton : String
|
||||||
secondaryBasicButton =
|
secondaryBasicButton =
|
||||||
secondaryBasicButtonRounded ++ secondaryBasicButtonPlain
|
secondaryBasicButtonRounded ++ secondaryBasicButtonPlain
|
||||||
@ -205,20 +225,6 @@ secondaryBasicButtonRounded =
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
--- Secondary Basic Button
|
|
||||||
|
|
||||||
|
|
||||||
secondaryBasicButtonMain : String
|
|
||||||
secondaryBasicButtonMain =
|
|
||||||
" my-auto whitespace-nowrap border-gray-500 dark:border-slate-500 text-gray-500 dark:text-slate-400 text-center shadow-none focus:outline-none focus:ring focus:ring-opacity-75 "
|
|
||||||
|
|
||||||
|
|
||||||
secondaryBasicButtonHover : String
|
|
||||||
secondaryBasicButtonHover =
|
|
||||||
" hover:bg-gray-600 hover:text-white dark:hover:text-white dark:hover:bg-slate-500 dark:hover:text-slate-100 "
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--- Delete Button
|
--- Delete Button
|
||||||
|
|
||||||
|
|
||||||
@ -248,6 +254,18 @@ deleteLabel =
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--- Green Button
|
||||||
|
|
||||||
|
|
||||||
|
greenButton : String
|
||||||
|
greenButton =
|
||||||
|
secondaryBasicButtonNoColor
|
||||||
|
++ secondaryBasicButtonRounded
|
||||||
|
++ " dark:bg-lime-600 dark:bg-opacity-30 dark:border-lime-600 dark:text-lime-400 "
|
||||||
|
++ " bg-lime-600 border-lime-600 text-white"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--- Others
|
--- Others
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user