Commit 874112e8 authored by pom421's avatar pom421
Browse files

refactor: replacement of react-autosuggest by react-select

parent b4f7038f
import React, { useState, useEffect, useRef } from "react"
import PropTypes from "prop-types"
import Autosuggest from "react-autosuggest"
import { API_URL, ASKERS_SEARCH_ENDPOINT, ASKERS_VIEW_ENDPOINT } from "../config"
import { isEmpty } from "../utils/misc"
import { handleAPIResponse } from "../utils/errors"
import { useTraceUpdate } from "../utils/debug"
const getSuggestions = async value => {
const bonus = value ? `?fuzzy=${value}` : ""
let json
try {
const response = await fetch(`${API_URL}${ASKERS_SEARCH_ENDPOINT}${bonus}`)
json = await handleAPIResponse(response)
} catch (error) {
console.error(error)
}
return isEmpty(json) ? [] : json
}
const getAskerById = async _id => {
const id = parseInt(_id, 10)
if (isNaN(id)) {
return ""
}
let json
try {
const response = await fetch(`${API_URL}${ASKERS_VIEW_ENDPOINT}/${id}`)
json = await handleAPIResponse(response)
} catch (error) {
console.error(error)
}
return isEmpty(json) ? "" : json.name
}
const AskerAutocomplete = props => {
const { dispatch, id, askerId, error, disabled } = props
useTraceUpdate(props)
// console.log("AskerAutocomplete:render")
const [autoSuggestData, setAutoSuggestData] = useState({ value: "", suggestions: [] })
const refValue = useRef("")
useEffect(() => {
const setAskerName = async id => {
// ref pour que useEffect ne re render pas en cas de nouveau autoSuggestData.value
let askerName = refValue.current
if (id) {
askerName = await getAskerById(id)
}
// console.log("AskerAutocomplete:useEffect", askerName)
setAutoSuggestData({ value: askerName, suggestions: [] })
}
if (!disabled) {
setAskerName(askerId)
} else {
refValue.current = ""
}
}, [askerId, disabled])
const onAutoSuggestChange = (event, { newValue }) => {
refValue.current = newValue
setAutoSuggestData(prev => ({ ...prev, value: newValue }))
}
const onSuggestionsFetchRequested = async ({ value }) => {
const suggestions = await getSuggestions(value)
setAutoSuggestData({ value, suggestions })
}
const onSuggestionsClearRequested = () => {
setAutoSuggestData(prev => ({ ...prev, suggestions: [] }))
}
const shouldRenderSuggestions = value => value.trim().length > 2
const inputProps = {
placeholder: "Tapez le nom du demandeur",
value: autoSuggestData.value,
onChange: onAutoSuggestChange,
onBlur: async () => {
if (!autoSuggestData.value) return
const suggestions = await getSuggestions(autoSuggestData.value)
if (suggestions && suggestions.length) {
if (suggestions.length === 1) {
if (autoSuggestData.value.trim().toUpperCase() === suggestions[0].name.toUpperCase()) {
dispatch({ type: "askerId", payload: { val: suggestions[0].id } })
} else {
dispatch({ type: "askerId", payload: { val: null } })
}
} else if (suggestions.length > 1) {
let hasDispatched = false
suggestions.forEach(elt => {
if (autoSuggestData.value.trim().toUpperCase() === elt.name.toUpperCase()) {
dispatch({ type: "askerId", payload: { val: elt.id } })
hasDispatched = true
}
})
if (!hasDispatched) {
dispatch({ type: "askerId", payload: { val: null } })
}
} else {
dispatch({ type: "askerId", payload: { val: null } })
}
} else {
dispatch({ type: "askerId", payload: { val: null } })
}
},
}
const getSuggestionValue = suggestion => {
return suggestion.name
}
const renderSuggestion = suggestion => <div>{suggestion.name}</div>
if (disabled) {
return (
<>
<input disabled className="input-disabled"></input>
<style jsx>{`
.input-disabled {
width: 100%;
display: block;
height: calc(1.5em + 0.75rem + 2px);
padding: 6px 12px;
font-weight: 400;
font-size: 1rem;
border: 1px solid ${error ? "#d63626" : "#ced4da"};
border-radius: 0.25rem;
-webkit-appearance: none;
background-clip: "padding-box";
color: #495057;
background-color: #dddddd;
}
`}</style>
</>
)
} else {
return (
<>
<Autosuggest
id={id}
suggestions={autoSuggestData.suggestions}
onSuggestionsFetchRequested={onSuggestionsFetchRequested}
onSuggestionsClearRequested={onSuggestionsClearRequested}
getSuggestionValue={getSuggestionValue}
shouldRenderSuggestions={shouldRenderSuggestions}
renderSuggestion={renderSuggestion}
inputProps={inputProps}
/>
<style jsx global>{`
.react-autosuggest__container {
position: relative;
}
.react-autosuggest__input {
width: 100%;
display: block;
height: calc(1.5em + 0.75rem + 2px);
padding: 6px 12px;
font-weight: 400;
font-size: 1rem;
border: 1px solid ${error ? "#d63626" : "#ced4da"};
border-radius: 0.25rem;
-webkit-appearance: none;
background-clip: "padding-box";
color: #495057;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}
.react-autosuggest__input--focused {
color: #495057;
background-color: #fff;
border-color: #3492ff;
outline: 0;
box-shadow: 0 0 0 0.2rem rgba(0, 83, 179, 0.25);
}
.react-autosuggest__input::-ms-clear {
display: none;
}
.react-autosuggest__input--open {
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
.react-autosuggest__suggestions-container {
display: none;
}
.react-autosuggest__suggestions-container--open {
display: block;
position: relative;
top: -1px;
width: 280px;
border: 1px solid #aaa;
background-color: #fff;
font-weight: 400;
font-size: 1rem;
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
z-index: 2;
}
.react-autosuggest__suggestions-list {
margin: 0;
padding: 0;
list-style-type: none;
}
.react-autosuggest__suggestion {
cursor: pointer;
padding: 10px 20px;
}
.react-autosuggest__suggestion--highlighted {
background-color: #ddd;
}
`}</style>
</>
)
}
}
AskerAutocomplete.propTypes = {
dispatch: PropTypes.func.isRequired,
id: PropTypes.string,
askerId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
error: PropTypes.string,
disabled: PropTypes.bool,
}
export default AskerAutocomplete
import React, { useEffect, useState } from "react"
import PropTypes from "prop-types"
import AsyncSelect from "react-select/async"
import { API_URL, ASKERS_SEARCH_ENDPOINT, ASKERS_VIEW_ENDPOINT } from "../config"
import { isEmpty } from "../utils/misc"
import { handleAPIResponse } from "../utils/errors"
const getSuggestions = async value => {
const bonus = value ? `?fuzzy=${value}` : ""
let json
try {
const response = await fetch(`${API_URL}${ASKERS_SEARCH_ENDPOINT}${bonus}`)
json = await handleAPIResponse(response)
} catch (error) {
console.error(error)
}
return isEmpty(json) ? [] : json
}
const getAskerById = async id => {
let json
try {
const response = await fetch(`${API_URL}${ASKERS_VIEW_ENDPOINT}/${id}`)
json = await handleAPIResponse(response)
} catch (error) {
console.error(error)
}
return isEmpty(json) ? null : { value: id, label: json.name }
}
const emptyValue = { value: "", label: "" }
const AskerSelect = ({ dispatch, disabled, askerId }) => {
const [existingValue, setExistingValue] = useState(emptyValue)
useEffect(() => {
const fetchData = async id => setExistingValue(id ? await getAskerById(id) : emptyValue)
fetchData(askerId)
}, [askerId])
const onChange = e => {
dispatch({ type: "askerId", payload: { val: (e && e.value) || null } })
}
return (
<>
<AsyncSelect
cacheOptions
defaultOptions
loadOptions={getSuggestions}
isClearable={true}
placeholder="Tapez le nom du demandeur"
noOptionsMessage={() => "Aucun résultat"}
loadingMessage={() => "Chargement..."}
onChange={onChange}
isDisabled={disabled}
value={existingValue}
/>
</>
)
}
AskerSelect.propTypes = {
dispatch: PropTypes.func.isRequired,
disabled: PropTypes.bool,
askerId: PropTypes.number,
}
export default AskerSelect
......@@ -6,7 +6,7 @@ import { Alert, Col, Container, FormFeedback, FormText, Input, Row } from "react
import moment from "moment"
import { handleAPIResponse } from "../utils/errors"
import AskerAutocomplete from "../components/AskerAutocomplete"
import AskerSelect from "../components/AskerSelect"
import {
API_URL,
ACT_DECLARATION_ENDPOINT,
......@@ -143,6 +143,7 @@ const ActDeclaration = ({ act, currentUser }) => {
const reducer = (state, action) => {
// console.log("ActDeclaration:reducer", action)
console.log("reducer", state, action)
setErrors(deleteProperty(errors, action.type))
......@@ -240,7 +241,7 @@ const ActDeclaration = ({ act, currentUser }) => {
console.error(error)
setErrors(errors => ({
...errors,
general: json && json.message ? json.message : "Erreur en base de données",
general: json && json.message ? json.message : "Erreur serveur",
}))
}
} else {
......@@ -264,7 +265,7 @@ const ActDeclaration = ({ act, currentUser }) => {
console.error(error)
setErrors(errors => ({
...errors,
general: json && json.message ? json.message : "Erreur en base de données",
general: json && json.message ? json.message : "Erreur serveur",
}))
}
}
......@@ -363,7 +364,7 @@ const ActDeclaration = ({ act, currentUser }) => {
</Col>
<Col md="8">
<Label htmlFor="askerId">Demandeur</Label>
<AskerAutocomplete
<AskerSelect
dispatch={dispatch}
id="askerId"
askerId={state.askerId}
......
......@@ -5,6 +5,8 @@ import knex from "../../../knex/knex"
import { ACT_MANAGEMENT } from "../../../utils/roles"
import { checkValidUserWithPrivilege, sendAPIError } from "../../../utils/api"
const MAX_VALUE = 100000
const handler = async (req, res) => {
res.setHeader("Content-Type", "application/json")
......@@ -21,12 +23,10 @@ const handler = async (req, res) => {
if (fuzzy) {
builder.where("name", "ilike", `%${fuzzy}%`)
}
if (!all) {
builder.limit(5)
}
})
.limit(all ? MAX_VALUE : 10)
.orderBy("name")
.select("id", "name")
.select("id as value", "name as label")
return res.status(STATUS_200_OK).json(askers)
} catch (error) {
......
......@@ -44,7 +44,7 @@ export const sendAPIError = (error, res) => {
// fallback error
return res
.status(STATUS_500_INTERNAL_SERVER_ERROR)
.json({ message: `Erreur de base de donnée / ${error}`, status: STATUS_500_INTERNAL_SERVER_ERROR })
.json({ message: `Erreur serveur / ${error}`, status: STATUS_500_INTERNAL_SERVER_ERROR })
}
export const checkValidUserWithPrivilege = (privilege, req) => {
......
......@@ -959,6 +959,13 @@
dependencies:
regenerator-runtime "^0.13.2"
"@babel/runtime@^7.7.2":
version "7.8.4"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.4.tgz#d79f5a2040f7caa24d53e563aad49cbc05581308"
integrity sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ==
dependencies:
regenerator-runtime "^0.13.2"
"@babel/template@^7.4.0", "@babel/template@^7.6.0":
version "7.6.0"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6"
......@@ -1038,7 +1045,38 @@
resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7"
integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==
"@emotion/hash@^0.7.4":
"@emotion/cache@^10.0.27", "@emotion/cache@^10.0.9":
version "10.0.27"
resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.27.tgz#7895db204e2c1a991ae33d51262a3a44f6737303"
integrity sha512-Zp8BEpbMunFsTcqAK4D7YTm3MvCp1SekflSLJH8lze2fCcSZ/yMkXHo8kb3t1/1Tdd3hAqf3Fb7z9VZ+FMiC9w==
dependencies:
"@emotion/sheet" "0.9.4"
"@emotion/stylis" "0.8.5"
"@emotion/utils" "0.11.3"
"@emotion/weak-memoize" "0.2.5"
"@emotion/core@^10.0.9":
version "10.0.27"
resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.27.tgz#7c3f78be681ab2273f3bf11ca3e2edc4a9dd1fdc"
integrity sha512-XbD5R36pVbohQMnKfajHv43g8EbN4NHdF6Zh9zg/C0nr0jqwOw3gYnC07Xj3yG43OYSRyrGsoQ5qPwc8ycvLZw==
dependencies:
"@babel/runtime" "^7.5.5"
"@emotion/cache" "^10.0.27"
"@emotion/css" "^10.0.27"
"@emotion/serialize" "^0.11.15"
"@emotion/sheet" "0.9.4"
"@emotion/utils" "0.11.3"
"@emotion/css@^10.0.27", "@emotion/css@^10.0.9":
version "10.0.27"
resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.27.tgz#3a7458198fbbebb53b01b2b87f64e5e21241e14c"
integrity sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==
dependencies:
"@emotion/serialize" "^0.11.15"
"@emotion/utils" "0.11.3"
babel-plugin-emotion "^10.0.27"
"@emotion/hash@0.7.4", "@emotion/hash@^0.7.4":
version "0.7.4"
resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.4.tgz#f14932887422c9056b15a8d222a9074a7dfa2831"
integrity sha512-fxfMSBMX3tlIbKUdtGKxqB1fyrH6gVrX39Gsv3y8lRYKUqlgDt3UMqQyGnR1bQMa2B8aGnhLZokZgg8vT0Le+A==
......@@ -1055,11 +1093,42 @@
resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb"
integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==
"@emotion/unitless@^0.7.0":
"@emotion/serialize@^0.11.15":
version "0.11.15"
resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.15.tgz#9a0f5873fb458d87d4f23e034413c12ed60a705a"
integrity sha512-YE+qnrmGwyR+XB5j7Bi+0GT1JWsdcjM/d4POu+TXkcnrRs4RFCCsi3d/Ebf+wSStHqAlTT2+dfd+b9N9EO2KBg==
dependencies:
"@emotion/hash" "0.7.4"
"@emotion/memoize" "0.7.4"
"@emotion/unitless" "0.7.5"
"@emotion/utils" "0.11.3"
csstype "^2.5.7"
"@emotion/sheet@0.9.4":
version "0.9.4"
resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5"
integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==
"@emotion/stylis@0.8.5":
version "0.8.5"
resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04"
integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==
"@emotion/unitless@0.7.5", "@emotion/unitless@^0.7.0":
version "0.7.5"
resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
"@emotion/utils@0.11.3":
version "0.11.3"
resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924"
integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==
"@emotion/weak-memoize@0.2.5":
version "0.2.5"
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
"@jest/console@^24.7.1", "@jest/console@^24.9.0":
version "24.9.0"
resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0"
......@@ -1405,6 +1474,11 @@
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339"
integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==
"@types/parse-json@^4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
"@types/prop-types@*":
version "15.7.3"
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
......@@ -2072,6 +2146,22 @@ babel-plugin-dynamic-import-node@^2.3.0:
dependencies:
object.assign "^4.1.0"
babel-plugin-emotion@^10.0.27:
version "10.0.27"
resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.27.tgz#59001cf5de847c1d61f2079cd906a90a00d3184f"
integrity sha512-SUNYcT4FqhOqvwv0z1oeYhqgheU8qrceLojuHyX17ngo7WtWqN5I9l3IGHzf21Xraj465CVzF4IvOlAF+3ed0A==
dependencies:
"@babel/helper-module-imports" "^7.0.0"
"@emotion/hash" "0.7.4"
"@emotion/memoize" "0.7.4"
"@emotion/serialize" "^0.11.15"
babel-plugin-macros "^2.0.0"
babel-plugin-syntax-jsx "^6.18.0"
convert-source-map "^1.5.0"
escape-string-regexp "^1.0.5"
find-root "^1.1.0"
source-map "^0.5.7"
babel-plugin-istanbul@^5.1.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854"
......@@ -2089,6 +2179,15 @@ babel-plugin-jest-hoist@^24.9.0:
dependencies:
"@types/babel__traverse" "^7.0.6"
babel-plugin-macros@^2.0.0:
version "2.8.0"
resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138"
integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==
dependencies:
"@babel/runtime" "^7.7.2"
cosmiconfig "^6.0.0"
resolve "^1.12.0"
"babel-plugin-styled-components@>= 1":
version "1.10.6"
resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.6.tgz#f8782953751115faf09a9f92431436912c34006b"
......@@ -2816,7 +2915,7 @@ convert-css-length@^2.0.1:
resolved "https://registry.yarnpkg.com/convert-css-length/-/convert-css-length-2.0.1.tgz#90a76bde5bfd24d72881a5b45d02249b2c1d257c"
integrity sha512-iGpbcvhLPRKUbBc0Quxx7w/bV14AC3ItuBEGMahA5WTYqB8lq9jH0kTXFheCBASsYnqeMFZhiTruNxr1N59Axg==
convert-source-map@1.7.0, convert-source-map@^1.7.0:
convert-source-map@1.7.0, convert-source-map@^1.5.0, convert-source-map@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
......@@ -2890,6 +2989,17 @@ cosmiconfig@^5.0.0:
js-yaml "^3.13.1"
parse-json "^4.0.0"
cosmiconfig@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982"
integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==
dependencies:
"@types/parse-json" "^4.0.0"
import-fresh "^3.1.0"
parse-json "^5.0.0"
path-type "^4.0.0"
yaml "^1.7.2"
create-ecdh@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
......@@ -3117,6 +3227,11 @@ csstype@^2.2.0, csstype@^2.5.2, csstype@^2.6.5, csstype@^2.6.7:
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.8.tgz#0fb6fc2417ffd2816a418c9336da74d7f07db431"
integrity sha512-msVS9qTuMT5zwAGCVm4mxfrZ18BNc6Csd0oJAtiFMZ1FAx1CCvy2+5MDmYoix63LM/6NDbNtodCiGYGmFgO0dA==
csstype@^2.5.7:
version "2.6.9"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.9.tgz#05141d0cd557a56b8891394c1911c40c8a98d098"
integrity sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q==
cyclist@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
......@@ -4009,6 +4124,11 @@ find-cache-dir@^3.0.0:
make-dir "^3.0.0"
pkg-dir "^4.1.0"
find-root@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
find-up@2.1.0, find-up@^2.0.0, find-up@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
......@@ -4613,7 +4733,7 @@ import-fresh@^2.0.0:
caller-path "^2.0.0"
resolve-from "^3.0.0"
import-fresh@^3.0.0:
import-fresh@^3.0.0, import-fresh@^3.1.0:
version "3.2.1"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66"
integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==
......@@ -5754,6 +5874,11 @@ liftoff@3.1.0:
rechoir "^0.6.2"
resolve "^1.1.7"
lines-and-columns@^1.1.6:
version "1.1.6"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
load-json-file@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
......@@ -6571,11 +6696,6 @@ object-assign@4.1.1, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
object-assign@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
integrity sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=
object-copy@^0.1.0:
version "0.1.0"