From 68e51f513f30a6860577c890f8b5a11614b879dd Mon Sep 17 00:00:00 2001 From: Danny Truong Date: Wed, 6 Jul 2022 00:01:45 +0200 Subject: [PATCH] Add svg formatter and json Add revert button to versioned field reset colum information re-create schema update solvent label --- app/models/concerns/versionable.rb | 14 +- .../mydb/elements/details/VersionsTable.js | 11 +- .../elements/details/VersionsTableChanges.js | 167 ++++++++++++++++-- ...800_change_column_reactions_temperature.rb | 1 + package.json | 1 + yarn.lock | 150 ++++++++++++++-- 6 files changed, 308 insertions(+), 36 deletions(-) diff --git a/app/models/concerns/versionable.rb b/app/models/concerns/versionable.rb index 2c3e797788..7c977fbd77 100644 --- a/app/models/concerns/versionable.rb +++ b/app/models/concerns/versionable.rb @@ -41,7 +41,7 @@ def versions_hash(record_name = name) old_value = version_value(key, base[key]) new_value = version_value(key, value) - if old_value.is_a?(Hash) || new_value.is_a?(Hash) + if (old_value.is_a?(Hash) || new_value.is_a?(Hash)) && key != 'temperature' # fix nil cases old_value ||= {} new_value ||= {} @@ -126,6 +126,10 @@ def version_label(attribute, value_hash = {}) 'Stop' when 'observation' 'Additional information for publication and purification details' + when 'temperature' + 'Temperature' + when 'solvent' + 'Solvent' else if self.class.columns_hash[attribute].type.in?(%i[hstore jsonb]) label_hash = {} @@ -158,6 +162,8 @@ def version_kind(attribute, value_hash = {}) :quill elsif self.class.name == 'Container' && key == 'kind' :treeselect + elsif self.class.name == 'Sample' && key == 'sample_svg_file' + :svg else :string end @@ -176,6 +182,12 @@ def version_kind(attribute, value_hash = {}) :date when 'melting_point', 'boiling_point' :numrange + when 'solvent' + :solvent + when 'sample_svg_file' + :svg + when 'temperature' + :temperature else :string end diff --git a/app/packs/src/apps/mydb/elements/details/VersionsTable.js b/app/packs/src/apps/mydb/elements/details/VersionsTable.js index cb0c7ef2be..ea90ddefcb 100644 --- a/app/packs/src/apps/mydb/elements/details/VersionsTable.js +++ b/app/packs/src/apps/mydb/elements/details/VersionsTable.js @@ -16,6 +16,8 @@ export default class VersionsTable extends Component { page: 1, pages: 1, }; + + this.updateParent = this.updateParent.bind(this); } componentDidMount() { @@ -51,8 +53,13 @@ export default class VersionsTable extends Component { }); } + updateParent(name, kind, value) { + this.props.updateGrandparent(name, kind, value); + } + render() { const { versions, page, pages } = this.state; + const { type } = this.props; const pagination = () => ( @@ -105,8 +112,8 @@ export default class VersionsTable extends Component { const expandRow = { onlyOneExpanding: true, parentClassName: 'active', - renderer: (row) => ( - + renderer: row => ( + ), }; diff --git a/app/packs/src/apps/mydb/elements/details/VersionsTableChanges.js b/app/packs/src/apps/mydb/elements/details/VersionsTableChanges.js index c8f344c021..6ffd59cf24 100644 --- a/app/packs/src/apps/mydb/elements/details/VersionsTableChanges.js +++ b/app/packs/src/apps/mydb/elements/details/VersionsTableChanges.js @@ -1,8 +1,45 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { Row, Col } from 'react-bootstrap'; +import { Row, Col, FormControl, Button, Table } from 'react-bootstrap'; import moment from 'moment'; import QuillViewer from 'src/components/QuillViewer'; +import SVG from 'react-inlinesvg'; +import ReactJson from 'react-json-view'; +import EditableCell from './lineChart/EditableCell' + +const SolventDetails = ({ solvent }) => { + if (!solvent) { + return (<>) + } + + return ( + + + + + + + + + + + + ) +}; function VersionsTableChanges(props) { const { changes } = props; @@ -15,21 +52,116 @@ function VersionsTableChanges(props) { input ? : '' ); - const numrange = (input) => ( - input ? input.slice(1, -1).split(',', 1) : '' + const numrange = input => ( + input ? `${input.slice(1, -1).split(',')[0]} - ${input.slice(1, -1).split(',')[1]}`: '' ); const treeselect = (input) => ( (input || '').split(' | ', 2)[1] || input ); + const svg = input => ( + input ? : '' + ); + + const solvent = input => { + let contents = [] + if (input) { + input.forEach((solv) => { + contents.push(( + + )) + }) + } + + return input ? (
+ + + + + + + + + + {contents.map(item => item)} + +
LabelRatio +
+
) : <>; + }; + + const temperature = input => { + if (input) { + var rows = [] + var data = input.data; + for (let i = 0; i < data.length; i = i + 1) { + let row = ( + + + + + +
+
+ +
+
+ + + ) + rows.push(row) + } + + return input ? (
+ Temperature: {input.userText} {input.valueUnit} + + + + + + + + + {rows} + +
Time (hh:mm:ss) Temperature ({input.valueUnit})
+
) : <>; + } + } + + const handleRevert = (name, kind, value) => { + props.updateParent(name, kind, value); + } + + const renderRevertButton = (name, kind, oldValue) => { + if (['location', 'name', 'external_label', 'real_amount_value', 'description', 'solvent', + 'real_amount_unit', 'showed_name', 'target_amount_unit', 'target_amount_value', 'boiling_point', + 'melting_point', 'short_label', 'purity', 'density', 'molarity_value', 'data', 'temperature'].includes(name)) { + return (); + } + } + const formatValue = (kind, value) => { const formatters = { date, quill, numrange, treeselect, - string: () => value, + svg, + solvent, + temperature, + string: () => JSON.stringify(value), }; return ( @@ -43,17 +175,22 @@ function VersionsTableChanges(props) { changes.map(({ name, label, kind, oldValue, newValue }) => ( - - - {label} - - - {formatValue(kind, oldValue)} - - - {formatValue(kind, newValue)} - - +
+ + + {label} + {renderRevertButton(name, kind, oldValue)} + + + + + {formatValue(kind, oldValue)} + + + {formatValue(kind, newValue)} + + +
)) } diff --git a/db/migrate/20171019102800_change_column_reactions_temperature.rb b/db/migrate/20171019102800_change_column_reactions_temperature.rb index 97056908fa..b8ef8ad1c1 100644 --- a/db/migrate/20171019102800_change_column_reactions_temperature.rb +++ b/db/migrate/20171019102800_change_column_reactions_temperature.rb @@ -2,6 +2,7 @@ # type text (rails hash serialized) to postgres jsonb (and down) class ChangeColumnReactionsTemperature < ActiveRecord::Migration[4.2] def up + Reaction.reset_column_information Reaction.with_deleted.find_each do |r| tmp = r.temperature tmp = "---\nvalueUnit: \"°C\"\nuserText: ''\ndata: []\n" if tmp.empty? diff --git a/package.json b/package.json index 8284d9f426..f4b13dbb98 100644 --- a/package.json +++ b/package.json @@ -88,6 +88,7 @@ "react-inlinesvg": "0.8.4", "react-input-autosize": "1.1.0", "react-json-editor-ajrm": "^2.5.10", + "react-json-view": "^1.21.3", "react-markdown": "^6.0.2", "react-molviewer": "^1.1.3", "react-notification-system": "^0.2.7", diff --git a/yarn.lock b/yarn.lock index d3e4d06156..11131729a2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5445,6 +5445,11 @@ base-64@^0.1.0: resolved "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz" integrity sha1-eAqZyE59YAJgNhURxId2E78k9rs= +base16@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ== + base64-arraybuffer@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz" @@ -6479,6 +6484,13 @@ create-react-class@^15.5.1, create-react-class@^15.6.3: loose-envify "^1.3.1" object-assign "^4.1.1" +cross-fetch@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" @@ -8352,6 +8364,18 @@ fbemitter@^2.0.0: dependencies: fbjs "^0.8.4" +fbemitter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" + integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw== + dependencies: + fbjs "^3.0.0" + +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== + fbjs@0.1.0-alpha.7: version "0.1.0-alpha.7" resolved "https://registry.npmjs.org/fbjs/-/fbjs-0.1.0-alpha.7.tgz" @@ -8374,6 +8398,19 @@ fbjs@^0.8.4: setimmediate "^1.0.5" ua-parser-js "^0.7.30" +fbjs@^3.0.0, fbjs@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.4.tgz#e1871c6bd3083bac71ff2da868ad5067d37716c6" + integrity sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ== + dependencies: + cross-fetch "^3.1.5" + fbjs-css-vars "^1.0.0" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.30" + fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" @@ -8498,11 +8535,12 @@ find-up@^4.0.0, find-up@^4.1.0: path-exists "^4.0.0" flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: - flatted "^3.1.0" + flatted "^3.2.9" + keyv "^4.5.3" rimraf "^3.0.2" flat@^5.0.2: @@ -8510,10 +8548,10 @@ flat@^5.0.2: resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -flatted@^3.1.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" - integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== flux@2.1.1: version "2.1.1" @@ -8524,10 +8562,18 @@ flux@2.1.1: fbjs "0.1.0-alpha.7" immutable "^3.7.4" +flux@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/flux/-/flux-4.0.3.tgz#573b504a24982c4768fdfb59d8d2ea5637d72ee7" + integrity sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw== + dependencies: + fbemitter "^3.0.0" + fbjs "^3.0.1" + follow-redirects@^1.0.0: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity "sha1-f4FcDNpCScdP8J6V75fCO1/QOZs= sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" + version "1.14.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7" + integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== font-family-papandreou@^0.2.0-patch1: version "0.2.0-patch2" @@ -10159,6 +10205,11 @@ jsesc@~0.5.0: resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" @@ -10373,6 +10424,13 @@ keycode@^2.2.0: resolved "https://registry.npmjs.org/keycode/-/keycode-2.2.1.tgz" integrity sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg== +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" @@ -10617,6 +10675,11 @@ lodash-es@^4.17.15, lodash-es@^4.17.21: resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA== + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" @@ -11345,6 +11408,13 @@ node-bitmap@0.0.1: resolved "https://registry.npmjs.org/node-bitmap/-/node-bitmap-0.0.1.tgz" integrity sha1-GA6scAPgxwdhjvMTaPYvhLKmkJE= +node-fetch@2.6.7, node-fetch@^2.6.1: + version "2.6.7" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz" @@ -11353,13 +11423,6 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" -node-fetch@^2.6.1: - version "2.6.7" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - node-fetch@^2.6.7: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" @@ -12448,6 +12511,11 @@ punycode@^2.3.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +pure-color@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" + integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== + qr.js@0.0.0: version "0.0.0" resolved "https://registry.npmjs.org/qr.js/-/qr.js-0.0.0.tgz" @@ -12962,6 +13030,16 @@ react-barcode@^1.1.0: jsbarcode "^3.8.0" prop-types "^15.6.2" +react-base16-styling@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" + integrity sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ== + dependencies: + base16 "^1.0.0" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + react-big-calendar@^1.5.1: version "1.6.8" resolved "https://registry.yarnpkg.com/react-big-calendar/-/react-big-calendar-1.6.8.tgz#0c793527cd403ebd52e85dcb51102c1bdc90f8b5" @@ -13247,6 +13325,16 @@ react-json-editor-ajrm@^2.5.10: dependencies: "@babel/runtime" "^7.0.0-rc.0" +react-json-view@^1.21.3: + version "1.21.3" + resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" + integrity sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw== + dependencies: + flux "^4.0.1" + react-base16-styling "^0.6.0" + react-lifecycles-compat "^3.0.4" + react-textarea-autosize "^8.3.2" + react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz" @@ -13513,6 +13601,15 @@ react-test-renderer@^17.0.0: react-shallow-renderer "^16.13.1" scheduler "^0.20.2" +react-textarea-autosize@^8.3.2: + version "8.3.4" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz#270a343de7ad350534141b02c9cb78903e553524" + integrity sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ== + dependencies: + "@babel/runtime" "^7.10.2" + use-composed-ref "^1.3.0" + use-latest "^1.2.1" + react-time-picker@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/react-time-picker/-/react-time-picker-5.2.0.tgz#e2c49a2b852b63009627084d674705d262f1b7f8" @@ -15537,6 +15634,23 @@ urllite@~0.5.0: dependencies: xtend "~4.0.0" +use-composed-ref@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda" + integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ== + +use-isomorphic-layout-effect@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" + integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== + +use-latest@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.1.tgz#d13dfb4b08c28e3e33991546a2cee53e14038cf2" + integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw== + dependencies: + use-isomorphic-layout-effect "^1.1.1" + use-sync-external-store@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a"