Browse Source

完善基本样式,CSS in JS

redux
YuJian920 3 years ago
parent
commit
fcfc347c4f
  1. 47
      README.md
  2. 4
      package.json
  3. 22
      src/components/lib.tsx
  4. 15
      src/context/index.tsx
  5. 17
      src/index.tsx
  6. 4
      src/pages/App.tsx
  7. 5
      src/pages/Auth/Login/index.tsx
  8. 7
      src/pages/Auth/Register/index.tsx
  9. 13
      src/pages/Auth/index.tsx
  10. 32
      src/pages/Auth/style.ts
  11. 37
      src/pages/Home/index.tsx
  12. 9
      src/pages/Home/style.ts
  13. 23
      src/pages/Home/style.tsx
  14. 19
      src/pages/Project/List/index.tsx
  15. 9
      src/pages/Project/Search/index.tsx
  16. 8
      src/pages/Project/index.tsx
  17. 6
      src/pages/Project/style.tsx
  18. 2
      src/style/global.css
  19. 10
      src/utils/index.ts
  20. 86
      yarn.lock

47
README.md

@ -1,46 +1,3 @@
# Getting Started with Create React App # React-Jira
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). 基于 React Hook 开发的 Jira 系统
## Available Scripts
In the project directory, you can run:
### `npm start`
Runs the app in the development mode.\
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
The page will reload if you make edits.\
You will also see any lint errors in the console.
### `npm test`
Launches the test runner in the interactive watch mode.\
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
### `npm run build`
Builds the app for production to the `build` folder.\
It correctly bundles React in production mode and optimizes the build for the best performance.
The build is minified and the filenames include the hashes.\
Your app is ready to be deployed!
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
### `npm run eject`
**Note: this is a one-way operation. Once you `eject`, you can’t go back!**
If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
## Learn More
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
To learn React, check out the [React documentation](https://reactjs.org/).

4
package.json

@ -15,10 +15,12 @@
"@types/react-dom": "^17.0.14", "@types/react-dom": "^17.0.14",
"antd": "^4.19.2", "antd": "^4.19.2",
"craco-less": "^2.0.0", "craco-less": "^2.0.0",
"jira-dev-tool": "^1.7.61", "dayjs": "^1.11.0",
"jira-dev-tool": "^1.6.59",
"qs": "^6.10.3", "qs": "^6.10.3",
"react": "^17.0.2", "react": "^17.0.2",
"react-dom": "^17.0.2", "react-dom": "^17.0.2",
"react-query": "^3.34.16",
"react-scripts": "5.0.0", "react-scripts": "5.0.0",
"typescript": "^4.6.2", "typescript": "^4.6.2",
"web-vitals": "^2.1.4" "web-vitals": "^2.1.4"

22
src/components/lib.tsx

@ -0,0 +1,22 @@
import styled from "@emotion/styled";
export const Row = styled.div<{
gap?: number | boolean;
between?: boolean;
marginBottom?: number;
}>`
display: flex;
align-items: center;
justify-content: ${(props) => (props.between ? "space-between" : undefined)};
margin-bottom: ${(props) => props.marginBottom + "rem"};
> * {
margin-top: 0 !important;
margin-bottom: 0 !important;
margin-right: ${(props) =>
// @ts-nocheck
typeof props.gap === "number"
? props.gap + "rem"
: props.gap
? "2rem"
: undefined};
}
`;

15
src/context/index.tsx

@ -1,8 +1,13 @@
import React, { ReactNode } from "react" import React, { ReactNode } from "react";
import { AuthProvider } from "./auth-context" import { QueryClient, QueryClientProvider } from "react-query";
import { AuthProvider } from "./auth-context";
const AppProviders = ({ children }: { children: ReactNode }) => { const AppProviders = ({ children }: { children: ReactNode }) => {
return <AuthProvider>{children}</AuthProvider> return (
} <QueryClientProvider client={new QueryClient()}>
<AuthProvider>{children}</AuthProvider>
</QueryClientProvider>
);
};
export default AppProviders export default AppProviders;

17
src/index.tsx

@ -1,14 +1,15 @@
import React from 'react'; import React from "react";
import ReactDOM from 'react-dom'; import ReactDOM from "react-dom";
import { loadDevTools } from 'jira-dev-tool' import { loadServer, DevTools } from "jira-dev-tool";
import AppProviders from './context'; import AppProviders from "./context";
import App from './pages/App'; import App from "./pages/App";
import reportWebVitals from './reportWebVitals'; import reportWebVitals from "./reportWebVitals";
loadDevTools(() => loadServer(() =>
ReactDOM.render( ReactDOM.render(
<React.StrictMode> <React.StrictMode>
<AppProviders> <AppProviders>
<DevTools />
<App /> <App />
</AppProviders> </AppProviders>
</React.StrictMode>, </React.StrictMode>,
@ -19,4 +20,4 @@ loadDevTools(() =>
// If you want to start measuring performance in your app, pass a function // If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log)) // to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals(); reportWebVitals();

4
src/pages/App.tsx

@ -2,11 +2,11 @@ import React from "react";
import Home from "./Home"; import Home from "./Home";
import AuthPage from "./Auth"; import AuthPage from "./Auth";
import { useAuth } from "../context/auth-context"; import { useAuth } from "../context/auth-context";
import "../style/global.less" import "../style/global.css";
const App = () => { const App = () => {
const { user } = useAuth(); const { user } = useAuth();
return <div>{user ? <Home /> : <AuthPage />}</div>; return <div className="App">{user ? <Home /> : <AuthPage />}</div>;
}; };
export default App; export default App;

5
src/pages/Auth/Login/index.tsx

@ -1,6 +1,7 @@
import React from "react"; import React from "react";
import { Form, Input, Button } from "antd"; import { Form, Input } from "antd";
import { useAuth } from "../../../context/auth-context"; import { useAuth } from "../../../context/auth-context";
import { LongButton } from "../style";
const { Item } = Form; const { Item } = Form;
@ -20,7 +21,7 @@ const Login = () => {
<Input placeholder="密码" type="text" id="password" /> <Input placeholder="密码" type="text" id="password" />
</Item> </Item>
<Item> <Item>
<Button htmlType="submit" type="primary"></Button> <LongButton htmlType="submit" type="primary"></LongButton>
</Item> </Item>
</Form> </Form>
); );

7
src/pages/Auth/Register/index.tsx

@ -1,6 +1,7 @@
import React from "react"; import React from "react";
import { Form, Input, Button } from "antd"; import { Form, Input } from "antd";
import { useAuth } from "../../../context/auth-context"; import { useAuth } from "../../../context/auth-context";
import { LongButton } from "../style";
const { Item } = Form; const { Item } = Form;
@ -23,9 +24,9 @@ const Register = () => {
<Input placeholder="密码" type="text" id="password" /> <Input placeholder="密码" type="text" id="password" />
</Item> </Item>
<Item> <Item>
<Button htmlType="submit" type="primary"> <LongButton htmlType="submit" type="primary">
</Button> </LongButton>
</Item> </Item>
</Form> </Form>
); );

13
src/pages/Auth/index.tsx

@ -1,19 +1,22 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { Divider } from "antd"; import { Divider, Button } from "antd";
import Login from "./Login"; import Login from "./Login";
import Register from "./Register"; import Register from "./Register";
import { Container, ShadowCard } from "./style"; import { Header, Container, ShadowCard, Background, Title } from "./style";
const AuthPage = () => { const AuthPage = () => {
const [isRegister, setIsRegister] = useState(false); const [isRegister, setIsRegister] = useState(false);
return ( return (
<Container> <Container>
<Header />
<Background />
<ShadowCard> <ShadowCard>
<Title>{isRegister ? "请注册" : "请登录"}</Title>
{isRegister ? <Register /> : <Login />} {isRegister ? <Register /> : <Login />}
<Divider /> <Divider />
<a onClick={() => setIsRegister(!isRegister)}> <Button type="link" onClick={() => setIsRegister(!isRegister)}>
{isRegister ? "已经有帐号了?直接登录" : "没有账号?注册新账号"} Button{isRegister ? "已经有帐号了?直接登录" : "没有账号?注册新账号"}
</a> </Button>
</ShadowCard> </ShadowCard>
</Container> </Container>
); );

32
src/pages/Auth/style.ts

@ -1,5 +1,35 @@
import styled from "@emotion/styled"; import styled from "@emotion/styled";
import { Card } from "antd"; import { Card, Button } from "antd";
import logo from "../../assets/logo.svg"
import left from "../../assets/left.svg"
import right from "../../assets/right.svg"
export const LongButton = styled(Button)`
width: 100%
`
export const Title = styled.h2`
margin-bottom: 2.4rem;
color: rgb(94, 108, 132);
`
export const Background = styled.div`
position: absolute;
width: 100%;
height: 100%;
background-repeat: no-repeat;
background-attachment: fixed;
background-position: left bottom, right bottom;
background-size: calc(((100vw - 40rem) / 2) - 3.2rem), calc(((100vw - 40rem) / 2) - 3.2rem), cover;
background-image: url(${left}), url(${right});
`
export const Header = styled.header`
background: url(${logo}) no-repeat center;
padding: 5rem 0;
background-size: 8rem;
width: 100%;
`
export const Container = styled.div` export const Container = styled.div`
display: flex; display: flex;

37
src/pages/Home/index.tsx

@ -1,19 +1,42 @@
import React from "react"; import React from "react";
import Project from "../Project"; import Project from "../Project";
import { useAuth } from "../../context/auth-context"; import { useAuth } from "../../context/auth-context";
import { PageHeader, Main } from "./style"; import { ReactComponent as SoftwareLogo } from "../../assets/software-logo.svg";
import { Main, Container, Header, HeaderLeft, HeaderRight } from "./style";
import { Dropdown, Menu, Button } from "antd";
const Home = () => { const Home = () => {
const { logout } = useAuth(); const { logout, user } = useAuth();
return ( return (
<div> <Container>
<PageHeader> <Header between={true}>
<button onClick={logout}></button> <HeaderLeft gap={true}>
</PageHeader> <SoftwareLogo width="18rem" color="rgb(38, 132, 255)" />
<h2></h2>
<h2></h2>
</HeaderLeft>
<HeaderRight>
<Dropdown
overlay={
<Menu>
<Menu.Item key="logout">
<Button type="link" onClick={logout}>
</Button>
</Menu.Item>
</Menu>
}
>
<Button type="link" onClick={(e) => e.preventDefault()}>
Hi, {user?.name}
</Button>
</Dropdown>
</HeaderRight>
</Header>
<Main> <Main>
<Project /> <Project />
</Main> </Main>
</div> </Container>
); );
}; };

9
src/pages/Home/style.ts

@ -1,9 +0,0 @@
import styled from "@emotion/styled";
export const PageHeader = styled.header`
height: 6rem;
`
export const Main = styled.main`
height: calc(100vh - 6rem)
`

23
src/pages/Home/style.tsx

@ -0,0 +1,23 @@
import styled from "@emotion/styled";
import { Row } from "../../components/lib";
export const Container = styled.div`
display: grid;
grid-template-rows: 6rem 1fr;
height: 100vh;
`;
export const Header = styled(Row)`
padding: 3.2rem;
box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.1);
z-index: 1;
`;
export const HeaderLeft = styled(Row)``;
export const HeaderRight = styled.div``;
export const Main = styled.main`
display: flex;
overflow: hidden;
`;

19
src/pages/Project/List/index.tsx

@ -1,5 +1,6 @@
import React from "react"; import React from "react";
import { Table } from "antd"; import { Table } from "antd";
import dayjs from "dayjs";
interface Project { interface Project {
id: string; id: string;
@ -7,6 +8,7 @@ interface Project {
personId: string; personId: string;
pin: boolean; pin: boolean;
organization: string; organization: string;
created: number;
} }
interface User { interface User {
@ -32,6 +34,10 @@ const ProjectList = ({ list, users }: ListProps) => {
dataIndex: "name", dataIndex: "name",
sorter: (a, b) => a.name.localeCompare(b.name), sorter: (a, b) => a.name.localeCompare(b.name),
}, },
{
title: "部门",
dataIndex: "organization",
},
{ {
title: "负责人", title: "负责人",
render: (value, project) => { render: (value, project) => {
@ -43,8 +49,21 @@ const ProjectList = ({ list, users }: ListProps) => {
); );
}, },
}, },
{
title: "创建时间",
render: (value, project) => {
return (
<span>
{project.created
? dayjs(project.created).format("YYYY-MM-DD")
: "无"}
</span>
);
},
},
]} ]}
dataSource={list} dataSource={list}
rowKey="id"
></Table> ></Table>
); );
}; };

9
src/pages/Project/Search/index.tsx

@ -23,13 +23,16 @@ export interface User {
const Search = ({ param, setParam, users }: SearchPanelProps) => { const Search = ({ param, setParam, users }: SearchPanelProps) => {
return ( return (
<Form> <Form style={{ marginBottom: "2rem" }} layout="inline">
<div> <Form.Item>
<Input <Input
placeholder="项目名"
type="text" type="text"
value={param.name} value={param.name}
onChange={(evt) => setParam({ ...param, name: evt.target.value })} onChange={(evt) => setParam({ ...param, name: evt.target.value })}
/> />
</Form.Item>
<Form.Item>
<Select <Select
value={param.personId} value={param.personId}
onChange={(value) => setParam({ ...param, personId: value })} onChange={(value) => setParam({ ...param, personId: value })}
@ -41,7 +44,7 @@ const Search = ({ param, setParam, users }: SearchPanelProps) => {
</Option> </Option>
))} ))}
</Select> </Select>
</div> </Form.Item>
</Form> </Form>
); );
}; };

8
src/pages/Project/index.tsx

@ -3,6 +3,7 @@ import { cleanObject, useDebounce, useMount } from "../../utils";
import { useRequest } from "../../utils/request"; import { useRequest } from "../../utils/request";
import List from "./List"; import List from "./List";
import SearchPanel from "./Search"; import SearchPanel from "./Search";
import { Container } from "./style";
const Project = () => { const Project = () => {
const [param, setParam] = useState({ name: "", personId: "" }); const [param, setParam] = useState({ name: "", personId: "" });
@ -13,7 +14,7 @@ const Project = () => {
const request = useRequest(); const request = useRequest();
useEffect(() => { useEffect(() => {
request("/projects", { data: cleanObject(debouncedParam) }).then(setList) request("/projects", { data: cleanObject(debouncedParam) }).then(setList);
}, [debouncedParam]); }, [debouncedParam]);
useMount(() => { useMount(() => {
@ -21,10 +22,11 @@ const Project = () => {
}); });
return ( return (
<div> <Container>
<h1></h1>
<SearchPanel users={users} param={param} setParam={setParam} /> <SearchPanel users={users} param={param} setParam={setParam} />
<List list={list} users={users}></List> <List list={list} users={users}></List>
</div> </Container>
); );
}; };

6
src/pages/Project/style.tsx

@ -0,0 +1,6 @@
import styled from "@emotion/styled";
export const Container = styled.div`
padding: 3.2rem;
width: 100%;
`

2
src/style/global.less → src/style/global.css

@ -1,5 +1,5 @@
html { html {
font-size: 62.5; font-size: 62.5%;
} }
html body #root .App { html body #root .App {

10
src/utils/index.ts

@ -24,17 +24,15 @@ export const useMount = (callback: () => void) => {
export const isFalsy = (value: unknown) => (value === 0 ? false : !value); export const isFalsy = (value: unknown) => (value === 0 ? false : !value);
export const isVoid = (value: unknown) => value === undefined || value === null || value === '';
// 筛选对象空值 // 筛选对象空值
export const cleanObject = (object: object) => { export const cleanObject = (object: { [key: string]: unknown }) => {
const result = { ...object }; const result = { ...object };
Object.keys(object).forEach((key) => { Object.keys(object).forEach((key) => {
// @ts-ignore
const v = object[key]; const v = object[key];
if (isFalsy(v)) { if (isVoid(v)) delete result[key];
// @ts-ignore
delete result[key];
}
}); });
return result; return result;

86
yarn.lock

@ -1058,7 +1058,7 @@
core-js-pure "^3.20.2" core-js-pure "^3.20.2"
regenerator-runtime "^0.13.4" regenerator-runtime "^0.13.4"
"@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.16.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.16.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
version "7.17.8" version "7.17.8"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.8.tgz#3e56e4aff81befa55ac3ac6a0967349fd1c5bca2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.8.tgz#3e56e4aff81befa55ac3ac6a0967349fd1c5bca2"
integrity sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA== integrity sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA==
@ -2895,6 +2895,11 @@ bfj@^7.0.2:
hoopy "^0.1.4" hoopy "^0.1.4"
tryer "^1.0.1" tryer "^1.0.1"
big-integer@^1.6.16:
version "1.6.51"
resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686"
integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==
big.js@^5.2.2: big.js@^5.2.2:
version "5.2.2" version "5.2.2"
resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
@ -2958,6 +2963,20 @@ braces@^3.0.1, braces@~3.0.2:
dependencies: dependencies:
fill-range "^7.0.1" fill-range "^7.0.1"
broadcast-channel@^3.4.1:
version "3.7.0"
resolved "https://registry.yarnpkg.com/broadcast-channel/-/broadcast-channel-3.7.0.tgz#2dfa5c7b4289547ac3f6705f9c00af8723889937"
integrity sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==
dependencies:
"@babel/runtime" "^7.7.2"
detect-node "^2.1.0"
js-sha3 "0.8.0"
microseconds "0.2.0"
nano-time "1.0.0"
oblivious-set "1.0.0"
rimraf "3.0.2"
unload "2.2.0"
browser-process-hrtime@^1.0.0: browser-process-hrtime@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
@ -3641,7 +3660,7 @@ [email protected]:
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2"
integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw== integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==
[email protected]: [email protected], dayjs@^1.11.0:
version "1.11.0" version "1.11.0"
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.0.tgz#009bf7ef2e2ea2d5db2e6583d2d39a4b5061e805" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.0.tgz#009bf7ef2e2ea2d5db2e6583d2d39a4b5061e805"
integrity sha512-JLC809s6Y948/FuCZPm5IX8rRhQwOiyMb2TfVVQEixG7P8Lm/gt5S7yoQZmC8x1UehI9Pb7sksEt4xx14m+7Ug== integrity sha512-JLC809s6Y948/FuCZPm5IX8rRhQwOiyMb2TfVVQEixG7P8Lm/gt5S7yoQZmC8x1UehI9Pb7sksEt4xx14m+7Ug==
@ -3762,7 +3781,7 @@ detect-newline@^3.0.0:
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
detect-node@^2.0.4: detect-node@^2.0.4, detect-node@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
@ -5805,7 +5824,7 @@ jest@^27.4.3:
import-local "^3.0.2" import-local "^3.0.2"
jest-cli "^27.5.1" jest-cli "^27.5.1"
jira-dev-tool@^1.7.61: jira-dev-tool@^1.6.13:
version "1.7.61" version "1.7.61"
resolved "https://registry.yarnpkg.com/jira-dev-tool/-/jira-dev-tool-1.7.61.tgz#32477c1e0f9f9f46ad5ffd61409ac05a1422c17c" resolved "https://registry.yarnpkg.com/jira-dev-tool/-/jira-dev-tool-1.7.61.tgz#32477c1e0f9f9f46ad5ffd61409ac05a1422c17c"
integrity sha512-ym9L6tQAs7Pi9XrGvoOlz0/dpYR23I2J1C0IDIk3E29YySHwYJ5KWWHZIk9dqiFSkDhfr/ae8CbZBhAbfe8EmQ== integrity sha512-ym9L6tQAs7Pi9XrGvoOlz0/dpYR23I2J1C0IDIk3E29YySHwYJ5KWWHZIk9dqiFSkDhfr/ae8CbZBhAbfe8EmQ==
@ -5815,6 +5834,21 @@ jira-dev-tool@^1.7.61:
react-query "^2.26.3" react-query "^2.26.3"
react-query-devtools "^2.6.3" react-query-devtools "^2.6.3"
jira-dev-tool@^1.6.59:
version "1.6.59"
resolved "https://registry.yarnpkg.com/jira-dev-tool/-/jira-dev-tool-1.6.59.tgz#67a98dba9fc9c976d004f3bea1b0349437a0da17"
integrity sha512-0LsUIP2qMSRzbnlccWeaWOxuh7zN+SHYarcT/YFQE+1mw9k6jbDNCxlxCjrpKfo/BYF8LWL6pmTSvHfDAS0kGg==
dependencies:
antd "^4.9.1"
jira-dev-tool "^1.6.13"
msw "^0.24.1"
react-query "^3.5.10"
[email protected]:
version "0.8.0"
resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840"
integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@ -6191,6 +6225,14 @@ match-sorter@^4.1.0:
"@babel/runtime" "^7.10.5" "@babel/runtime" "^7.10.5"
remove-accents "0.4.2" remove-accents "0.4.2"
match-sorter@^6.0.2:
version "6.3.1"
resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.1.tgz#98cc37fda756093424ddf3cbc62bfe9c75b92bda"
integrity sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==
dependencies:
"@babel/runtime" "^7.12.5"
remove-accents "0.4.2"
[email protected]: [email protected]:
version "2.0.14" version "2.0.14"
resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50"
@ -6246,6 +6288,11 @@ micromatch@^4.0.2, micromatch@^4.0.4:
braces "^3.0.1" braces "^3.0.1"
picomatch "^2.2.3" picomatch "^2.2.3"
[email protected]:
version "0.2.0"
resolved "https://registry.yarnpkg.com/microseconds/-/microseconds-0.2.0.tgz#233b25f50c62a65d861f978a4a4f8ec18797dc39"
integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==
[email protected], "mime-db@>= 1.43.0 < 2": [email protected], "mime-db@>= 1.43.0 < 2":
version "1.52.0" version "1.52.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
@ -6362,6 +6409,13 @@ multicast-dns@^6.0.1:
dns-packet "^1.3.1" dns-packet "^1.3.1"
thunky "^1.0.2" thunky "^1.0.2"
[email protected]:
version "1.0.0"
resolved "https://registry.yarnpkg.com/nano-time/-/nano-time-1.0.0.tgz#b0554f69ad89e22d0907f7a12b0993a5d96137ef"
integrity sha1-sFVPaa2J4i0JB/ehKwmTpdlhN+8=
dependencies:
big-integer "^1.6.16"
nanoid@^3.3.1: nanoid@^3.3.1:
version "3.3.1" version "3.3.1"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35"
@ -6558,6 +6612,11 @@ object.values@^1.1.0, object.values@^1.1.5:
define-properties "^1.1.3" define-properties "^1.1.3"
es-abstract "^1.19.1" es-abstract "^1.19.1"
[email protected]:
version "1.0.0"
resolved "https://registry.yarnpkg.com/oblivious-set/-/oblivious-set-1.0.0.tgz#c8316f2c2fb6ff7b11b6158db3234c49f733c566"
integrity sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==
obuf@^1.0.0, obuf@^1.1.2: obuf@^1.0.0, obuf@^1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
@ -7953,6 +8012,15 @@ react-query@^2.26.3:
dependencies: dependencies:
"@babel/runtime" "^7.5.5" "@babel/runtime" "^7.5.5"
react-query@^3.34.16, react-query@^3.5.10:
version "3.34.16"
resolved "https://registry.yarnpkg.com/react-query/-/react-query-3.34.16.tgz#279ea180bcaeaec49c7864b29d1711ee9f152594"
integrity sha512-7FvBvjgEM4YQ8nPfmAr+lJfbW95uyW/TVjFoi2GwCkF33/S8ajx45tuPHPFGWs4qYwPy1mzwxD4IQfpUDrefNQ==
dependencies:
"@babel/runtime" "^7.5.5"
broadcast-channel "^3.4.1"
match-sorter "^6.0.2"
react-refresh@^0.11.0: react-refresh@^0.11.0:
version "0.11.0" version "0.11.0"
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046"
@ -8232,7 +8300,7 @@ reusify@^1.0.4:
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
rimraf@^3.0.0, rimraf@^3.0.2: [email protected], rimraf@^3.0.0, rimraf@^3.0.2:
version "3.0.2" version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
@ -9180,6 +9248,14 @@ universalify@^2.0.0:
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
[email protected]:
version "2.2.0"
resolved "https://registry.yarnpkg.com/unload/-/unload-2.2.0.tgz#ccc88fdcad345faa06a92039ec0f80b488880ef7"
integrity sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==
dependencies:
"@babel/runtime" "^7.6.2"
detect-node "^2.0.4"
[email protected], unpipe@~1.0.0: [email protected], unpipe@~1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"

Loading…
Cancel
Save