WIP for invoice list items on inovice enter
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
"axios": "^0.19.2",
|
||||
"chart.js": "^2.9.3",
|
||||
"dotenv": "^8.2.0",
|
||||
"firebase": "^7.9.2",
|
||||
"firebase": "^7.9.3",
|
||||
"graphql": "^14.6.0",
|
||||
"i18next": "^19.3.2",
|
||||
"node-sass": "^4.13.1",
|
||||
|
||||
@@ -3,13 +3,7 @@ import { Button, Popover, Input, InputNumber, Form } from "antd";
|
||||
import { SelectOutlined } from "@ant-design/icons";
|
||||
import { useTranslation } from "react-i18next";
|
||||
|
||||
export default function InvoiceAddLineButton({
|
||||
jobLine,
|
||||
invoiceLineState,
|
||||
form,
|
||||
discount,
|
||||
disabled
|
||||
}) {
|
||||
export default function InvoiceAddLineButton({ jobLine, discount, disabled }) {
|
||||
const [visibility, setVisibility] = useState(false);
|
||||
const { t } = useTranslation();
|
||||
|
||||
|
||||
@@ -1,19 +1,8 @@
|
||||
import {
|
||||
Select,
|
||||
Button,
|
||||
DatePicker,
|
||||
Form,
|
||||
Input,
|
||||
InputNumber,
|
||||
Modal,
|
||||
Switch,
|
||||
Row,
|
||||
Col
|
||||
} from "antd";
|
||||
import { Button, DatePicker, Form, Input, Modal, Select, Switch } from "antd";
|
||||
import React from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import InvoiceEnterModalTableComponent from "./invoice-enter-modal.table.component";
|
||||
|
||||
import CurrencyInput from "../form-items-formatted/currency-form-item.component";
|
||||
import InvoiceEnterModalLinesComponent from "./invoice-enter-modal.lines.component";
|
||||
export default function InvoiceEnterModalComponent({
|
||||
visible,
|
||||
invoice,
|
||||
@@ -145,22 +134,18 @@ export default function InvoiceEnterModalComponent({
|
||||
{ required: true, message: t("general.validation.required") }
|
||||
]}
|
||||
>
|
||||
<InputNumber precision={2} min={0} />
|
||||
<CurrencyInput />
|
||||
</Form.Item>
|
||||
</div>
|
||||
<Row>
|
||||
<Col span={12}>
|
||||
<InvoiceEnterModalTableComponent
|
||||
lineData={lineData}
|
||||
linesState={linesState}
|
||||
form={form}
|
||||
vendor={vendor}
|
||||
/>
|
||||
</Col>
|
||||
<Col span={12}>Table of added items.</Col>
|
||||
</Row>
|
||||
);
|
||||
</Modal>{" "}
|
||||
<InvoiceEnterModalLinesComponent
|
||||
lineData={lineData}
|
||||
discount={vendor && vendor.discount}
|
||||
form={form}
|
||||
/>
|
||||
<Button onClick={() => console.log(form.getFieldsValue())}>
|
||||
Field Values
|
||||
</Button>
|
||||
</Modal>
|
||||
</Form>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ function InvoiceEnterModalContainer({
|
||||
const handleFinish = values => {
|
||||
console.log("values", values);
|
||||
alert("Closing this modal.");
|
||||
toggleModalVisible();
|
||||
// toggleModalVisible();
|
||||
// if (!jobLineEditModal.context.id) {
|
||||
// insertJobLine({
|
||||
// variables: {
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
import { DeleteFilled } from "@ant-design/icons";
|
||||
import { Button, Form, Input, Select } from "antd";
|
||||
import React from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import CurrencyInput from "../form-items-formatted/currency-form-item.component";
|
||||
|
||||
export default function InvoiceEnterModalLinesComponent({
|
||||
lineData,
|
||||
discount,
|
||||
form
|
||||
}) {
|
||||
const { t } = useTranslation();
|
||||
const { setFieldsValue, getFieldsValue } = form;
|
||||
return (
|
||||
<Form.List name="invoicelines">
|
||||
{(fields, { add, remove }) => {
|
||||
return (
|
||||
<div>
|
||||
{fields.map((field, index) => (
|
||||
<Form.Item required={false} key={field.key}>
|
||||
<div style={{ display: "flex" }}>
|
||||
<Form.Item
|
||||
label={t("invoicelines.fields.line_desc")}
|
||||
key={`${index}line_desc`}
|
||||
name={[field.name, "line_desc"]}
|
||||
>
|
||||
<Select
|
||||
style={{ width: "300px" }}
|
||||
onSelect={(value, opt) => {
|
||||
setFieldsValue({
|
||||
invoicelines: getFieldsValue([
|
||||
"invoicelines"
|
||||
]).invoicelines.map((item, idx) => {
|
||||
if (idx === index) {
|
||||
return {
|
||||
...item,
|
||||
joblineid: opt.key.includes("noline")
|
||||
? null
|
||||
: opt.key
|
||||
};
|
||||
}
|
||||
return item;
|
||||
})
|
||||
});
|
||||
}}
|
||||
showSearch
|
||||
>
|
||||
<Select.Option
|
||||
key={`${index}noline`}
|
||||
value={t("invoicelines.labels.other")}
|
||||
>
|
||||
{t("invoicelines.labels.other")}
|
||||
</Select.Option>
|
||||
{lineData
|
||||
? lineData.map(item => (
|
||||
<Select.Option key={item.id} value={item.line_desc}>
|
||||
{item.line_desc}
|
||||
</Select.Option>
|
||||
))
|
||||
: null}
|
||||
</Select>
|
||||
</Form.Item>
|
||||
{console.log(
|
||||
'getFieldsValue("invoicelines").invoicelines[index]',
|
||||
getFieldsValue("invoicelines").invoicelines[index]
|
||||
)}
|
||||
{getFieldsValue("invoicelines").invoicelines[index] &&
|
||||
getFieldsValue("invoicelines").invoicelines[index]
|
||||
.line_desc &&
|
||||
!getFieldsValue("invoicelines").invoicelines[index].joblineid
|
||||
? "Other"
|
||||
: null}
|
||||
|
||||
<Form.Item
|
||||
label={t("invoicelines.fields.actual")}
|
||||
key={`${index}actual_price`}
|
||||
name={[field.name, "actual_price"]}
|
||||
>
|
||||
<CurrencyInput
|
||||
onBlur={e => {
|
||||
setFieldsValue({
|
||||
invoicelines: getFieldsValue(
|
||||
"invoicelines"
|
||||
).invoicelines.map((item, idx) => {
|
||||
if (idx === index) {
|
||||
return {
|
||||
...item,
|
||||
actual_cost:
|
||||
parseFloat(e.target.value.substring(1)) * 1 -
|
||||
discount
|
||||
};
|
||||
}
|
||||
return item;
|
||||
})
|
||||
});
|
||||
}}
|
||||
/>
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
label={t("invoicelines.fields.actual_cost")}
|
||||
key={`${index}actual_cost`}
|
||||
name={[field.name, "actual_cost"]}
|
||||
>
|
||||
<CurrencyInput />
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
label={t("invoicelines.fields.cost_center")}
|
||||
key={`${index}cost_center`}
|
||||
name={[field.name, "cost_center"]}
|
||||
>
|
||||
<Input />
|
||||
</Form.Item>
|
||||
|
||||
<DeleteFilled
|
||||
onClick={() => {
|
||||
remove(field.name);
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</Form.Item>
|
||||
))}
|
||||
<Form.Item>
|
||||
<Button
|
||||
type="dashed"
|
||||
onClick={() => {
|
||||
add();
|
||||
}}
|
||||
style={{ width: "60%" }}
|
||||
>
|
||||
New liNe
|
||||
</Button>
|
||||
</Form.Item>
|
||||
</div>
|
||||
);
|
||||
}}
|
||||
</Form.List>
|
||||
);
|
||||
}
|
||||
@@ -7,11 +7,9 @@ import InvoiceAddLineButton from "../invoice-add-line-button/invoice-add-line-bu
|
||||
|
||||
export default function InvoiceEnterModalTableComponent({
|
||||
lineData,
|
||||
linesState,
|
||||
form,
|
||||
vendor
|
||||
}) {
|
||||
//const [selectedLines, setSelectedLines] = linesState;
|
||||
const [state, setState] = useState({
|
||||
sortedInfo: {}
|
||||
});
|
||||
|
||||
@@ -4,18 +4,19 @@ import "./loading-spinner.styles.scss";
|
||||
|
||||
export default function LoadingSpinner({ loading = true, message, ...props }) {
|
||||
return (
|
||||
<Spin
|
||||
spinning={loading}
|
||||
className="loading-spinner"
|
||||
size="large"
|
||||
style={{
|
||||
position: "relative",
|
||||
alignContent: "center"
|
||||
}}
|
||||
delay={200}
|
||||
tip={message ? message : null}
|
||||
>
|
||||
{props.children}
|
||||
</Spin>
|
||||
<div className="loading-spinner">
|
||||
<Spin
|
||||
spinning={loading}
|
||||
size="large"
|
||||
style={{
|
||||
position: "relative",
|
||||
alignContent: "center"
|
||||
}}
|
||||
delay={200}
|
||||
tip={message ? message : null}
|
||||
>
|
||||
{props.children}
|
||||
</Spin>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,2 +1,7 @@
|
||||
.loading-spinner {
|
||||
display: flex;
|
||||
height: 50%;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin: 1em;
|
||||
}
|
||||
|
||||
@@ -1,126 +1,91 @@
|
||||
import { Button, Col, DatePicker, Form, Input, Row } from "antd";
|
||||
import moment from "moment";
|
||||
import React from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import ResetForm from "../form-items-formatted/reset-form-item.component";
|
||||
export default function VehicleDetailFormComponent({ vehicle, form }) {
|
||||
export default function VehicleDetailFormComponent() {
|
||||
const { t } = useTranslation();
|
||||
const { isFieldsTouched, resetFields, getFieldDecorator } = form;
|
||||
|
||||
return (
|
||||
<div>
|
||||
{isFieldsTouched() ? <ResetForm resetFields={resetFields} /> : null}
|
||||
<Button type="primary" key="submit" htmlType="submit">
|
||||
{t("general.labels.save")}
|
||||
</Button>
|
||||
<Row>
|
||||
<Col span={8}>
|
||||
<Form.Item label={t("vehicles.fields.v_vin")}>
|
||||
{getFieldDecorator("v_vin", {
|
||||
initialValue: vehicle.v_vin
|
||||
})(<Input name="v_vin" />)}
|
||||
<Form.Item label={t("vehicles.fields.v_vin")} name="v_vin">
|
||||
<Input />
|
||||
</Form.Item>
|
||||
<Form.Item label={t("vehicles.fields.plate_no")}>
|
||||
{getFieldDecorator("plate_no", {
|
||||
initialValue: vehicle.plate_no
|
||||
})(<Input name="plate_no" />)}
|
||||
<Form.Item label={t("vehicles.fields.plate_no")} name="plate_no">
|
||||
<Input />
|
||||
</Form.Item>
|
||||
<Form.Item label={t("vehicles.fields.plate_st")}>
|
||||
{getFieldDecorator("plate_st", {
|
||||
initialValue: vehicle.plate_st
|
||||
})(<Input name="plate_st" />)}
|
||||
<Form.Item label={t("vehicles.fields.plate_st")} name="plate_st">
|
||||
<Input />
|
||||
</Form.Item>
|
||||
<Form.Item label={t("vehicles.fields.v_type")}>
|
||||
{getFieldDecorator("v_type", {
|
||||
initialValue: vehicle.v_type
|
||||
})(<Input name="v_type" />)}
|
||||
<Form.Item label={t("vehicles.fields.v_type")} name="v_type">
|
||||
<Input />
|
||||
</Form.Item>
|
||||
<Form.Item label={t("vehicles.fields.v_trimcode")}>
|
||||
{getFieldDecorator("v_trimcode", {
|
||||
initialValue: vehicle.v_trimcode
|
||||
})(<Input name="v_trimcode" />)}
|
||||
<Form.Item label={t("vehicles.fields.v_trimcode")} name="v_trimcode">
|
||||
<Input />
|
||||
</Form.Item>
|
||||
<Form.Item label={t("vehicles.fields.v_tone")}>
|
||||
{getFieldDecorator("v_tone", {
|
||||
initialValue: vehicle.v_tone
|
||||
})(<Input name="v_tone" />)}
|
||||
<Form.Item label={t("vehicles.fields.v_tone")} name="v_tone">
|
||||
<Input />
|
||||
</Form.Item>
|
||||
<Form.Item label={t("vehicles.fields.v_bstyle")}>
|
||||
{getFieldDecorator("v_bstyle", {
|
||||
initialValue: vehicle.v_bstyle
|
||||
})(<Input name="v_bstyle" />)}
|
||||
<Form.Item label={t("vehicles.fields.v_bstyle")} name="v_bstyle">
|
||||
<Input />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={8}>
|
||||
<Form.Item label={t("vehicles.fields.v_stage")}>
|
||||
{getFieldDecorator("v_stage", {
|
||||
initialValue: vehicle.v_stage
|
||||
})(<Input name="v_stage" />)}
|
||||
<Form.Item label={t("vehicles.fields.v_stage")} name="v_stage">
|
||||
<Input />
|
||||
</Form.Item>
|
||||
<Form.Item label={t("vehicles.fields.v_prod_dt")}>
|
||||
{getFieldDecorator("v_prod_dt", {
|
||||
initialValue: vehicle.v_prod_dt ? moment(vehicle.v_prod_dt) : null
|
||||
})(<DatePicker name="v_prod_dt" />)}
|
||||
<Form.Item label={t("vehicles.fields.v_prod_dt")} name="v_prod_dt">
|
||||
<DatePicker />
|
||||
</Form.Item>
|
||||
{
|
||||
//TODO Add handling for paint code json
|
||||
}
|
||||
<Form.Item label={t("vehicles.fields.v_paint_codes")}>
|
||||
{getFieldDecorator("v_paint_codes", {
|
||||
initialValue: JSON.stringify(vehicle.v_paint_codes)
|
||||
})(<Input name="v_paint_codes" />)}
|
||||
<Form.Item
|
||||
label={t("vehicles.fields.v_paint_codes")}
|
||||
name="v_paint_codes"
|
||||
>
|
||||
<Input />
|
||||
</Form.Item>
|
||||
<Form.Item label={t("vehicles.fields.v_options")}>
|
||||
{getFieldDecorator("v_options", {
|
||||
initialValue: vehicle.v_options
|
||||
})(<Input name="v_options" />)}
|
||||
<Form.Item label={t("vehicles.fields.v_options")} name="v_options">
|
||||
<Input />
|
||||
</Form.Item>
|
||||
<Form.Item label={t("vehicles.fields.v_model_yr")}>
|
||||
{getFieldDecorator("v_model_yr", {
|
||||
initialValue: vehicle.v_model_yr
|
||||
})(<Input name="v_model_yr" />)}
|
||||
<Form.Item label={t("vehicles.fields.v_model_yr")} name="v_model_yr">
|
||||
<Input />
|
||||
</Form.Item>
|
||||
<Form.Item label={t("vehicles.fields.v_model_desc")}>
|
||||
{getFieldDecorator("v_model_desc", {
|
||||
initialValue: vehicle.v_model_desc
|
||||
})(<Input name="v_model_desc" />)}
|
||||
<Form.Item
|
||||
label={t("vehicles.fields.v_model_desc")}
|
||||
name="v_model_desc"
|
||||
>
|
||||
<Input />
|
||||
</Form.Item>
|
||||
<Form.Item label={t("vehicles.fields.trim_color")}>
|
||||
{getFieldDecorator("trim_color", {
|
||||
initialValue: vehicle.trim_color
|
||||
})(<Input name="trim_color" />)}
|
||||
<Form.Item label={t("vehicles.fields.trim_color")} name="trim_color">
|
||||
<Input />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={8}>
|
||||
<Form.Item label={t("vehicles.fields.v_mldgcode")}>
|
||||
{getFieldDecorator("v_mldgcode", {
|
||||
initialValue: vehicle.v_mldgcode
|
||||
})(<Input name="v_mldgcode" />)}
|
||||
<Form.Item label={t("vehicles.fields.v_mldgcode")} name="v_mldgcode">
|
||||
<Input />
|
||||
</Form.Item>
|
||||
<Form.Item label={t("vehicles.fields.v_makecode")}>
|
||||
{getFieldDecorator("v_makecode", {
|
||||
initialValue: vehicle.v_makecode
|
||||
})(<Input name="v_makecode" />)}
|
||||
<Form.Item label={t("vehicles.fields.v_makecode")} name="v_makecode">
|
||||
<Input />
|
||||
</Form.Item>
|
||||
<Form.Item label={t("vehicles.fields.v_make_desc")}>
|
||||
{getFieldDecorator("v_make_desc", {
|
||||
initialValue: vehicle.v_make_desc
|
||||
})(<Input name="v_make_desc" />)}
|
||||
<Form.Item
|
||||
label={t("vehicles.fields.v_make_desc")}
|
||||
name="v_make_desc"
|
||||
>
|
||||
<Input />
|
||||
</Form.Item>
|
||||
<Form.Item label={t("vehicles.fields.v_engine")}>
|
||||
{getFieldDecorator("v_engine", {
|
||||
initialValue: vehicle.v_engine
|
||||
})(<Input name="v_engine" />)}
|
||||
<Form.Item label={t("vehicles.fields.v_engine")} name="v_engine">
|
||||
<Input />
|
||||
</Form.Item>
|
||||
<Form.Item label={t("vehicles.fields.v_cond")}>
|
||||
{getFieldDecorator("v_cond", {
|
||||
initialValue: vehicle.v_cond
|
||||
})(<Input name="v_cond" />)}
|
||||
<Form.Item label={t("vehicles.fields.v_cond")} name="v_cond">
|
||||
<Input />
|
||||
</Form.Item>
|
||||
<Form.Item label={t("vehicles.fields.v_color")}>
|
||||
{getFieldDecorator("v_color", {
|
||||
initialValue: vehicle.v_color
|
||||
})(<Input name="v_color" />)}
|
||||
<Form.Item label={t("vehicles.fields.v_color")} name="v_color">
|
||||
<Input />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
|
||||
@@ -3,13 +3,13 @@ import { Form, notification } from "antd";
|
||||
import { useMutation } from "react-apollo";
|
||||
import VehicleDetailFormComponent from "./vehicle-detail-form.component";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import moment from "moment";
|
||||
import { UPDATE_VEHICLE } from "../../graphql/vehicles.queries";
|
||||
|
||||
function VehicleDetailFormContainer({ vehicle, refetch }) {
|
||||
const { t } = useTranslation();
|
||||
const [updateVehicle] = useMutation(UPDATE_VEHICLE);
|
||||
const [form] = Form.useForm();
|
||||
const { resetFields } = form;
|
||||
|
||||
const handleFinish = values => {
|
||||
updateVehicle({
|
||||
@@ -19,14 +19,21 @@ function VehicleDetailFormContainer({ vehicle, refetch }) {
|
||||
message: t("vehicles.successes.save")
|
||||
});
|
||||
//TODO Better way to reset the field decorators?
|
||||
if (refetch) refetch().then();
|
||||
resetFields();
|
||||
if (refetch) refetch();
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<Form onFinish={handleFinish} form={Form} autoComplete="off">
|
||||
<VehicleDetailFormComponent vehicle={vehicle} form={form} />
|
||||
<Form
|
||||
onFinish={handleFinish}
|
||||
form={form}
|
||||
autoComplete="off"
|
||||
initialValues={{
|
||||
...vehicle,
|
||||
v_prod_dt: vehicle.v_prod_dt ? moment(vehicle.v_prod_dt) : null
|
||||
}}
|
||||
>
|
||||
<VehicleDetailFormComponent />
|
||||
</Form>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -147,7 +147,13 @@
|
||||
"invoicelines": {
|
||||
"fields": {
|
||||
"actual": "Actual",
|
||||
"actual_cost": "Actual Cost",
|
||||
"cost_center": "Cost Center",
|
||||
"line_desc": "Line Description",
|
||||
"retail": "Retail"
|
||||
},
|
||||
"labels": {
|
||||
"other": "Other Item"
|
||||
}
|
||||
},
|
||||
"invoices": {
|
||||
|
||||
@@ -147,7 +147,13 @@
|
||||
"invoicelines": {
|
||||
"fields": {
|
||||
"actual": "",
|
||||
"actual_cost": "",
|
||||
"cost_center": "",
|
||||
"line_desc": "",
|
||||
"retail": ""
|
||||
},
|
||||
"labels": {
|
||||
"other": ""
|
||||
}
|
||||
},
|
||||
"invoices": {
|
||||
|
||||
@@ -147,7 +147,13 @@
|
||||
"invoicelines": {
|
||||
"fields": {
|
||||
"actual": "",
|
||||
"actual_cost": "",
|
||||
"cost_center": "",
|
||||
"line_desc": "",
|
||||
"retail": ""
|
||||
},
|
||||
"labels": {
|
||||
"other": ""
|
||||
}
|
||||
},
|
||||
"invoices": {
|
||||
|
||||
@@ -1115,14 +1115,14 @@
|
||||
resolved "https://registry.yarnpkg.com/@firebase/analytics-types/-/analytics-types-0.2.7.tgz#70c3c3c9c8941e73c516cd38fabd02b18f912c6a"
|
||||
integrity sha512-2596a1v62BkVXuobbQerC1gDavoxFOmgVutFFQcm24v6/2Iv8nlx2k8Wjy9eLAZWmAZHU/RkTX11K9gHy+w5Bg==
|
||||
|
||||
"@firebase/analytics@0.2.14":
|
||||
version "0.2.14"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/analytics/-/analytics-0.2.14.tgz#df798e6fc0e0e97fda07517a20ba97ad5b305d05"
|
||||
integrity sha512-RIkTqNOC12hDRNiWK6aNPZztBOt9VKYZgVp3nvUDRn8bmwkJQARHEvoQzJXFSXHM5fl9cM/9BO+bpuIuGUOdGQ==
|
||||
"@firebase/analytics@0.2.15":
|
||||
version "0.2.15"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/analytics/-/analytics-0.2.15.tgz#d98751d8ca55180fc41d4f4e148444d01deaa4dd"
|
||||
integrity sha512-pNRyLU6PndZa0iO+HN+GwY1HobsyU584a1KN5ZWBuwaqbUOB/99uChn2n6XaPrlD/G07uzv6dpw558IQXahhow==
|
||||
dependencies:
|
||||
"@firebase/analytics-types" "0.2.7"
|
||||
"@firebase/component" "0.1.6"
|
||||
"@firebase/installations" "0.4.3"
|
||||
"@firebase/installations" "0.4.4"
|
||||
"@firebase/util" "0.2.41"
|
||||
tslib "1.10.0"
|
||||
|
||||
@@ -1213,10 +1213,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@firebase/functions-types/-/functions-types-0.3.15.tgz#32d3fd61447793c277b1f86a11ff97236bf856df"
|
||||
integrity sha512-VM0v7fJM+mzvL9tJgNtQWc3UZLUOl2GJYi0TdfiuqTbfEdPDQCXtYVTN3roAO5LJTIgNw0imZyOCgsHDy9MtXg==
|
||||
|
||||
"@firebase/functions@0.4.35":
|
||||
version "0.4.35"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/functions/-/functions-0.4.35.tgz#e6be5d785165ef493ea568fbda339949a76519aa"
|
||||
integrity sha512-s7NUXZfRvbyE9Fe+6snQab5iTKGAwa6pZQ/u00bD3L2vhh2ATJYZjdiGNtLmKajwjhgPiE8zT2CO2Bnr2zEz4g==
|
||||
"@firebase/functions@0.4.36":
|
||||
version "0.4.36"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/functions/-/functions-0.4.36.tgz#1fd2f4fc67cfa055840e9e32aea07d0949ee6b4d"
|
||||
integrity sha512-GheZOwxUbMHhM1xidkOJlfTGk4FuC2sJBA9/yYA23St5qgudcT0Bu3r+3XcC4DhJv6G/mu2IoM9dn1LBgBclXw==
|
||||
dependencies:
|
||||
"@firebase/component" "0.1.6"
|
||||
"@firebase/functions-types" "0.3.15"
|
||||
@@ -1229,10 +1229,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@firebase/installations-types/-/installations-types-0.3.2.tgz#3ec255ea3abdca5eababd8cd7a5849795ede16ce"
|
||||
integrity sha512-E5Jp1QlwYSypRiOJSkKtEC2RS8GnubUYqTAqjiJAtBsa0guZZunBcXvdn3kqWOyn3R4HaM2tDZ/bGdWpulVUkg==
|
||||
|
||||
"@firebase/installations@0.4.3":
|
||||
version "0.4.3"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/installations/-/installations-0.4.3.tgz#7bf03219fc9a068a3b17237cc8bcaba318ad8dbf"
|
||||
integrity sha512-tiuQv1dUYUCHzRHKm9LyY5uK/H9Rjlfqi28nFbnvXvZ+9yVCbbOsIrjdzWzwuh13yG+OygN+Zw186h/7Yoj/MQ==
|
||||
"@firebase/installations@0.4.4":
|
||||
version "0.4.4"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/installations/-/installations-0.4.4.tgz#dac3376bba732c18f5bf5ce8e910de32ad3dabd1"
|
||||
integrity sha512-gbfK5dOKe1SyveF7Ko7Bg/LtTPoX3cByoGUv7LMR0Q7Dn8Qw9JsIz2n7q21tr2YzAxv1q7RqIzRJchoFicqISA==
|
||||
dependencies:
|
||||
"@firebase/component" "0.1.6"
|
||||
"@firebase/installations-types" "0.3.2"
|
||||
@@ -1250,32 +1250,32 @@
|
||||
resolved "https://registry.yarnpkg.com/@firebase/messaging-types/-/messaging-types-0.4.3.tgz#945a32cd06f23cf234ce637b5e192821b149e8f5"
|
||||
integrity sha512-FxUQXjy5p/5r6E/pGS3Bnp3+3wshh3vkCo7ISU7ggOM6GBhq9FnyBLZKGix7bsjn079sNTOr5PH0KT8wGI+CPQ==
|
||||
|
||||
"@firebase/messaging@0.6.7":
|
||||
version "0.6.7"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.6.7.tgz#cabd72a078f3ab60b1cdf4ef58678bd98408739d"
|
||||
integrity sha512-dido24992CfghX1cuwr6DwTY+TE/48AG/XMRS9AmRQ3ioa5NskTetrirJ3yubXVH1ItAjhuT7U9BfhxMcy52mw==
|
||||
"@firebase/messaging@0.6.8":
|
||||
version "0.6.8"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.6.8.tgz#231a5a03c431a4c8e41427e275f61f67c0caac93"
|
||||
integrity sha512-APMuLpx2XnYCQMvKI9W17CfNOi+YhecoU5gZLwUuuspZvgasr28daSNNU+QcjdMPsJsIbU9UDJa4do8x2uAEig==
|
||||
dependencies:
|
||||
"@firebase/component" "0.1.6"
|
||||
"@firebase/installations" "0.4.3"
|
||||
"@firebase/installations" "0.4.4"
|
||||
"@firebase/messaging-types" "0.4.3"
|
||||
"@firebase/util" "0.2.41"
|
||||
idb "3.0.2"
|
||||
tslib "1.10.0"
|
||||
|
||||
"@firebase/performance-types@0.0.10":
|
||||
version "0.0.10"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/performance-types/-/performance-types-0.0.10.tgz#a6d2294f13f0ce9541e8e8428d122c3649a82ce1"
|
||||
integrity sha512-E7aYto3XAZ9EzWOOs5YOZSsngztL0Br8l4OHEZdtxRVNTSvKnUcCx0UlFW06Prkbig9aNHFyuN5Ia9LFjd8+9w==
|
||||
"@firebase/performance-types@0.0.11":
|
||||
version "0.0.11"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/performance-types/-/performance-types-0.0.11.tgz#76485463123ebe697ce71942dfa71bca3c5d553e"
|
||||
integrity sha512-w6dD4ZcWT1NsGsPcgX1lAVZyxEVEWgTSBu768YABCQH7zVcvPo9PE3xWcPWPujlAPf9QXdessiX9cC5m4Khabw==
|
||||
|
||||
"@firebase/performance@0.2.33":
|
||||
version "0.2.33"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/performance/-/performance-0.2.33.tgz#b005e8a291e11a2ca3dc6ae873c66e56e419066e"
|
||||
integrity sha512-BsSrocIucpUWRf1MgurItLDPGN9IgKA8AemgYeW9zSpiFzliN2n5njOEvOOg0vcqD2dNf/UuyO/a7UjSvc0ZFw==
|
||||
"@firebase/performance@0.2.34":
|
||||
version "0.2.34"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/performance/-/performance-0.2.34.tgz#76e870bf6b2cd164aba0097808a416bdd316f3aa"
|
||||
integrity sha512-Ek038Acq0mbVqsw7TGqomFDBxvoTIu1rdRdqRKSdFiBRZcLLW9X1Ad6aSATMu6lki2gcUE/XCbMJtSQfVsl5Bw==
|
||||
dependencies:
|
||||
"@firebase/component" "0.1.6"
|
||||
"@firebase/installations" "0.4.3"
|
||||
"@firebase/installations" "0.4.4"
|
||||
"@firebase/logger" "0.1.36"
|
||||
"@firebase/performance-types" "0.0.10"
|
||||
"@firebase/performance-types" "0.0.11"
|
||||
"@firebase/util" "0.2.41"
|
||||
tslib "1.10.0"
|
||||
|
||||
@@ -1293,13 +1293,13 @@
|
||||
resolved "https://registry.yarnpkg.com/@firebase/remote-config-types/-/remote-config-types-0.1.7.tgz#03a0cf4e7658593212d5a20780eca823b29bba36"
|
||||
integrity sha512-oWyw1KNx/2+vaNBe1zYSppe5eSmjLxIphi49VAwYWO3SqhxpF3BsJ0uo4f9pU4bjYINuRFMYsCkbhZuKAR7o+w==
|
||||
|
||||
"@firebase/remote-config@0.1.14":
|
||||
version "0.1.14"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/remote-config/-/remote-config-0.1.14.tgz#e2c5b0b73bf967b36ed66ef9ce81972ca3f22f88"
|
||||
integrity sha512-VgDTymn2tDFswd6ec/tNwkFoaIib8bRSM1B6EhEhTrvInhPwnefGi7YSkUfWvYZnMnvyhVv5zIBbIplaLpvBQQ==
|
||||
"@firebase/remote-config@0.1.15":
|
||||
version "0.1.15"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/remote-config/-/remote-config-0.1.15.tgz#fc7fe44aadbcd90dfcfd825d31ad0a4fc8b0c56a"
|
||||
integrity sha512-avBM6w6oLV3fEBVGTXdIBKuj62p4Zcu0/01Xm4YEsdrMRfyLX1Q9C5XYIsGiGb6xM+R8EWzd5F4AsAMtc/ofQw==
|
||||
dependencies:
|
||||
"@firebase/component" "0.1.6"
|
||||
"@firebase/installations" "0.4.3"
|
||||
"@firebase/installations" "0.4.4"
|
||||
"@firebase/logger" "0.1.36"
|
||||
"@firebase/remote-config-types" "0.1.7"
|
||||
"@firebase/util" "0.2.41"
|
||||
@@ -1310,10 +1310,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.3.10.tgz#2456608a193d1939d399c58d4c8350d62a91d47e"
|
||||
integrity sha512-c76gnTUFTDDumV4GenkuVY34EwAXjN7ZWLR6NSvuAnMvBlROdGKshTCsmyi8GTMd/dDoFB/MLJ+YOnk5tMbU4Q==
|
||||
|
||||
"@firebase/storage@0.3.27":
|
||||
version "0.3.27"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.3.27.tgz#4488efddac27a9cdd3b53bff9e95d23b9ea424ff"
|
||||
integrity sha512-utePEBFsd02w9DM6Jf0+Kz7k5EcSL86KgcdF8eWQa9y1AkwAzzetfHPi8wjrDihubhyxB/zD0+Mop7Pqd/Zi8A==
|
||||
"@firebase/storage@0.3.28":
|
||||
version "0.3.28"
|
||||
resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.3.28.tgz#6809672b13d112c082bd8096897cdd3806368567"
|
||||
integrity sha512-70GFutKqYBkqN3TCXgd8asGc/i3NYuCpaBvCHk7QpwN+7/9Cukba4GOfiN1QIINc7nOj/nrsWKvo49NzhxGy4w==
|
||||
dependencies:
|
||||
"@firebase/component" "0.1.6"
|
||||
"@firebase/storage-types" "0.3.10"
|
||||
@@ -5429,24 +5429,24 @@ find-up@^3.0.0:
|
||||
dependencies:
|
||||
locate-path "^3.0.0"
|
||||
|
||||
firebase@^7.9.2:
|
||||
version "7.9.2"
|
||||
resolved "https://registry.yarnpkg.com/firebase/-/firebase-7.9.2.tgz#3f098a47fc8e61442cb7e2eecd38187a63a65fb2"
|
||||
integrity sha512-c2B4DpoP/KAXFnej6PmBBW+JMldyNfX9vmNjSRIO1op9kgJt+VreckdOJM0VG6ij9iApAQEHKV/7QjbJq6Z9Xw==
|
||||
firebase@^7.9.3:
|
||||
version "7.9.3"
|
||||
resolved "https://registry.yarnpkg.com/firebase/-/firebase-7.9.3.tgz#6dd411571d0b481e1b2485125da5153615fb7bd2"
|
||||
integrity sha512-9tIxZvA8/Tf5p7nPMEE9zFklbmwqny4qHxGzwG3Hus4TInkxyYeiGY2L1mNTV+WuTJzQYuo9NtCRZLBnsChpqQ==
|
||||
dependencies:
|
||||
"@firebase/analytics" "0.2.14"
|
||||
"@firebase/analytics" "0.2.15"
|
||||
"@firebase/app" "0.5.5"
|
||||
"@firebase/app-types" "0.5.2"
|
||||
"@firebase/auth" "0.13.6"
|
||||
"@firebase/database" "0.5.22"
|
||||
"@firebase/firestore" "1.11.2"
|
||||
"@firebase/functions" "0.4.35"
|
||||
"@firebase/installations" "0.4.3"
|
||||
"@firebase/messaging" "0.6.7"
|
||||
"@firebase/performance" "0.2.33"
|
||||
"@firebase/functions" "0.4.36"
|
||||
"@firebase/installations" "0.4.4"
|
||||
"@firebase/messaging" "0.6.8"
|
||||
"@firebase/performance" "0.2.34"
|
||||
"@firebase/polyfill" "0.3.31"
|
||||
"@firebase/remote-config" "0.1.14"
|
||||
"@firebase/storage" "0.3.27"
|
||||
"@firebase/remote-config" "0.1.15"
|
||||
"@firebase/storage" "0.3.28"
|
||||
"@firebase/util" "0.2.41"
|
||||
|
||||
flat-cache@^2.0.1:
|
||||
@@ -8354,7 +8354,7 @@ node-notifier@^5.4.2:
|
||||
shellwords "^0.1.1"
|
||||
which "^1.3.0"
|
||||
|
||||
node-pre-gyp@*, node-pre-gyp@^0.14.0:
|
||||
node-pre-gyp@^0.14.0:
|
||||
version "0.14.0"
|
||||
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83"
|
||||
integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==
|
||||
|
||||
Reference in New Issue
Block a user