mirror of
https://github.com/filecoin-project/slate.git
synced 2024-12-23 17:12:53 +03:00
data page polish and no repeats in slates
This commit is contained in:
parent
60b2a31280
commit
014934c844
@ -260,13 +260,14 @@ export const HardDrive = (props) => (
|
|||||||
<g
|
<g
|
||||||
fill="none"
|
fill="none"
|
||||||
stroke="currentColor"
|
stroke="currentColor"
|
||||||
|
strokeWidth="2"
|
||||||
strokeLinecap="round"
|
strokeLinecap="round"
|
||||||
strokeLinejoin="round"
|
strokeLinejoin="round"
|
||||||
>
|
>
|
||||||
<path d="m2.5 21c-1.10456 0-2-.89544-2-2v-4c0-1.10456.89544-2 2-2h19c1.10456 0 2 .89544 2 2v4c0 1.10456-.89544 2-2 2z" />
|
<path d="M22 12H2" />
|
||||||
<path d="m3.5 18h17" />
|
<path d="M5.45 5.11L2 12V18C2 18.5304 2.21071 19.0391 2.58579 19.4142C2.96086 19.7893 3.46957 20 4 20H20C20.5304 20 21.0391 19.7893 21.4142 19.4142C21.7893 19.0391 22 18.5304 22 18V12L18.55 5.11C18.3844 4.77679 18.1292 4.49637 17.813 4.30028C17.4967 4.10419 17.1321 4.0002 16.76 4H7.24C6.86792 4.0002 6.50326 4.10419 6.18704 4.30028C5.87083 4.49637 5.61558 4.77679 5.45 5.11V5.11Z" />
|
||||||
<path d="m20.25 15.5h-.00000001c-.138071.00000001-.25.111929-.25.25.00000001.138071.111929.25.25.25.138071-.00000001.25-.111929.25-.25 0-.138071-.111929-.25-.25-.25" />
|
<path d="M6 16H6.01" />
|
||||||
<path d="m23.438 14.505-2.459-9.624.00000002.00000009c-.28282-1.10668-1.27976-1.88093-2.422-1.881h-13.114-.00000012c-1.14224.00007126-2.13918.774322-2.422 1.881l-2.459 9.624" />
|
<path d="M10 16H10.01" />
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
);
|
);
|
||||||
|
@ -332,23 +332,18 @@ export default class ApplicationPage extends React.Component {
|
|||||||
|
|
||||||
const { added, skipped } = response.data;
|
const { added, skipped } = response.data;
|
||||||
if (!added && !skipped) return;
|
if (!added && !skipped) return;
|
||||||
let message = "";
|
let message = `${added || 0} file${added !== 1 ? "s" : ""} uploaded. `;
|
||||||
if (added) {
|
|
||||||
message += `${added || 0} file${added !== 1 ? "s" : ""} uploaded. `;
|
|
||||||
}
|
|
||||||
if (skipped) {
|
if (skipped) {
|
||||||
message += `${skipped || 0} duplicate / existing file${
|
message += `${skipped || 0} duplicate / existing file${
|
||||||
added !== 1 ? "s were" : " was"
|
added !== 1 ? "s were" : " was"
|
||||||
} skipped.`;
|
} skipped.`;
|
||||||
}
|
}
|
||||||
if (message) {
|
|
||||||
dispatchCustomEvent({
|
dispatchCustomEvent({
|
||||||
name: "create-alert",
|
name: "create-alert",
|
||||||
detail: {
|
detail: {
|
||||||
alert: { message, status: "INFO" },
|
alert: { message, status: !added ? null : "INFO" },
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -14,13 +14,13 @@ const IconMap = {
|
|||||||
FOLDER: <SVG.Folder height="20px" />,
|
FOLDER: <SVG.Folder height="20px" />,
|
||||||
WALLET: <SVG.OldWallet height="20px" />,
|
WALLET: <SVG.OldWallet height="20px" />,
|
||||||
DEALS: <SVG.Deals height="20px" />,
|
DEALS: <SVG.Deals height="20px" />,
|
||||||
MAKE_DEAL: <SVG.Deals height="20px" />,
|
MAKE_DEAL: <SVG.HardDrive height="20px" />,
|
||||||
SLATES: <SVG.Layers height="20px" />,
|
SLATES: <SVG.Layers height="20px" />,
|
||||||
SLATE: <SVG.Slate height="20px" />,
|
SLATE: <SVG.Slate height="20px" />,
|
||||||
LOCAL_DATA: <SVG.HardDrive height="20px" />,
|
LOCAL_DATA: <SVG.HardDrive height="20px" />,
|
||||||
PROFILE_PAGE: <SVG.ProfileUser height="20px" />,
|
PROFILE_PAGE: <SVG.ProfileUser height="20px" />,
|
||||||
SETTINGS_DEVELOPER: <SVG.Tool height="20px" />,
|
SETTINGS_DEVELOPER: <SVG.Tool height="20px" />,
|
||||||
SETTINGS: <SVG.Layers height="20px" />,
|
SETTINGS: <SVG.Settings height="20px" />,
|
||||||
DIRECTORY: <SVG.Directory height="20px" />,
|
DIRECTORY: <SVG.Directory height="20px" />,
|
||||||
FILECOIN: <SVG.Wallet height="20px" />,
|
FILECOIN: <SVG.Wallet height="20px" />,
|
||||||
};
|
};
|
||||||
|
@ -435,7 +435,9 @@ export default class DataView extends React.Component {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
return null;
|
return null;
|
||||||
} else if (addResponse.error) {
|
}
|
||||||
|
|
||||||
|
if (addResponse.error) {
|
||||||
dispatchCustomEvent({
|
dispatchCustomEvent({
|
||||||
name: "create-alert",
|
name: "create-alert",
|
||||||
detail: { alert: { decorator: addResponse.decorator } },
|
detail: { alert: { decorator: addResponse.decorator } },
|
||||||
@ -443,6 +445,20 @@ export default class DataView extends React.Component {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const { added, skipped } = addResponse;
|
||||||
|
let message = `${added || 0} file${added !== 1 ? "s" : ""} uploaded. `;
|
||||||
|
if (skipped) {
|
||||||
|
message += `${skipped || 0} duplicate / existing file${
|
||||||
|
added !== 1 ? "s were" : " was"
|
||||||
|
} skipped.`;
|
||||||
|
}
|
||||||
|
dispatchCustomEvent({
|
||||||
|
name: "create-alert",
|
||||||
|
detail: {
|
||||||
|
alert: { message, status: !added ? null : "INFO" },
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
await this.props.onRehydrate();
|
await this.props.onRehydrate();
|
||||||
await this._handleUpdate();
|
await this._handleUpdate();
|
||||||
|
|
||||||
@ -670,14 +686,12 @@ export default class DataView extends React.Component {
|
|||||||
</ButtonWarning>
|
</ButtonWarning>
|
||||||
<div
|
<div
|
||||||
css={STYLES_ICON_BOX}
|
css={STYLES_ICON_BOX}
|
||||||
style={{
|
|
||||||
marginLeft: 8,
|
|
||||||
position: "relative",
|
|
||||||
left: 10,
|
|
||||||
}}
|
|
||||||
onClick={() => this.setState({ checked: {} })}
|
onClick={() => this.setState({ checked: {} })}
|
||||||
>
|
>
|
||||||
<SVG.Dismiss height="20px" />
|
<SVG.Dismiss
|
||||||
|
height="20px"
|
||||||
|
style={{ color: Constants.system.darkGray }}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -8,7 +8,10 @@ import * as Actions from "~/common/actions";
|
|||||||
|
|
||||||
import { dispatchCustomEvent } from "~/common/custom-events";
|
import { dispatchCustomEvent } from "~/common/custom-events";
|
||||||
import { css } from "@emotion/react";
|
import { css } from "@emotion/react";
|
||||||
import { ButtonPrimary } from "~/components/system/components/Buttons";
|
import {
|
||||||
|
ButtonPrimary,
|
||||||
|
ButtonDisabled,
|
||||||
|
} from "~/components/system/components/Buttons";
|
||||||
|
|
||||||
const STYLES_SLATE_NAME = css`
|
const STYLES_SLATE_NAME = css`
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
@ -95,13 +98,29 @@ export default class SidebarAddFileToSlate extends React.Component {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
} else if (addResponse.error) {
|
}
|
||||||
|
|
||||||
|
if (addResponse.error) {
|
||||||
dispatchCustomEvent({
|
dispatchCustomEvent({
|
||||||
name: "create-alert",
|
name: "create-alert",
|
||||||
detail: { alert: { decorator: addResponse.decorator } },
|
detail: { alert: { decorator: addResponse.decorator } },
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const { added, skipped } = addResponse;
|
||||||
|
let message = `${added || 0} file${added !== 1 ? "s" : ""} uploaded. `;
|
||||||
|
if (skipped) {
|
||||||
|
message += `${skipped || 0} duplicate / existing file${
|
||||||
|
added !== 1 ? "s were" : " was"
|
||||||
|
} skipped.`;
|
||||||
|
}
|
||||||
|
dispatchCustomEvent({
|
||||||
|
name: "create-alert",
|
||||||
|
detail: {
|
||||||
|
alert: { message, status: !added ? null : "INFO" },
|
||||||
|
},
|
||||||
|
});
|
||||||
}
|
}
|
||||||
await this.props.onRehydrate();
|
await this.props.onRehydrate();
|
||||||
dispatchCustomEvent({
|
dispatchCustomEvent({
|
||||||
@ -121,7 +140,8 @@ export default class SidebarAddFileToSlate extends React.Component {
|
|||||||
marginBottom: "64px",
|
marginBottom: "64px",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Add files to slate
|
Add {this.props.sidebarData.files.length || 0} file
|
||||||
|
{this.props.sidebarData.files.length === 1 ? "" : "s"} to slate
|
||||||
</System.P>
|
</System.P>
|
||||||
|
|
||||||
<System.P css={STYLES_HEADER}>Slates</System.P>
|
<System.P css={STYLES_HEADER}>Slates</System.P>
|
||||||
@ -132,7 +152,11 @@ export default class SidebarAddFileToSlate extends React.Component {
|
|||||||
>
|
>
|
||||||
<SVG.Plus
|
<SVG.Plus
|
||||||
height="24px"
|
height="24px"
|
||||||
style={{ color: Constants.system.brand, marginRight: 8 }}
|
style={{
|
||||||
|
color: Constants.system.brand,
|
||||||
|
marginRight: 8,
|
||||||
|
pointerEvents: "none",
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
css={STYLES_SLATE_NAME}
|
css={STYLES_SLATE_NAME}
|
||||||
@ -146,11 +170,18 @@ export default class SidebarAddFileToSlate extends React.Component {
|
|||||||
<div css={STYLES_SLATE_LINE} onClick={() => this._handleAdd(slate)}>
|
<div css={STYLES_SLATE_LINE} onClick={() => this._handleAdd(slate)}>
|
||||||
<div css={STYLES_ICON_BOX}>
|
<div css={STYLES_ICON_BOX}>
|
||||||
{this.state.selected[slate.id] ? (
|
{this.state.selected[slate.id] ? (
|
||||||
<SVG.Slate height="24px" style={{ marginRight: 8 }} />
|
<SVG.Slate
|
||||||
|
height="24px"
|
||||||
|
style={{ marginRight: 8, pointerEvents: "none" }}
|
||||||
|
/>
|
||||||
) : (
|
) : (
|
||||||
<SVG.PlusCircle
|
<SVG.PlusCircle
|
||||||
height="24px"
|
height="24px"
|
||||||
style={{ color: Constants.system.darkGray, marginRight: 8 }}
|
style={{
|
||||||
|
color: Constants.system.darkGray,
|
||||||
|
marginRight: 8,
|
||||||
|
pointerEvents: "none",
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
@ -167,6 +198,7 @@ export default class SidebarAddFileToSlate extends React.Component {
|
|||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
{Object.keys(this.state.selected).length ? (
|
||||||
<ButtonPrimary
|
<ButtonPrimary
|
||||||
full
|
full
|
||||||
onClick={this._handleSubmit}
|
onClick={this._handleSubmit}
|
||||||
@ -174,6 +206,11 @@ export default class SidebarAddFileToSlate extends React.Component {
|
|||||||
>
|
>
|
||||||
Add to slates
|
Add to slates
|
||||||
</ButtonPrimary>
|
</ButtonPrimary>
|
||||||
|
) : (
|
||||||
|
<ButtonDisabled full style={{ marginTop: 32 }}>
|
||||||
|
Add to slates
|
||||||
|
</ButtonDisabled>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -122,6 +122,22 @@ export default class SidebarCreateSlate extends React.Component {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const { added, skipped } = addResponse;
|
||||||
|
let message = `${added || 0} file${added !== 1 ? "s" : ""} uploaded. `;
|
||||||
|
if (skipped) {
|
||||||
|
message += `${skipped || 0} duplicate / existing file${
|
||||||
|
added !== 1 ? "s were" : " was"
|
||||||
|
} skipped.`;
|
||||||
|
}
|
||||||
|
if (message) {
|
||||||
|
dispatchCustomEvent({
|
||||||
|
name: "create-alert",
|
||||||
|
detail: {
|
||||||
|
alert: { message, status: !added ? null : "INFO" },
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
await this.props.onRehydrate();
|
await this.props.onRehydrate();
|
||||||
|
|
||||||
dispatchCustomEvent({
|
dispatchCustomEvent({
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
|
|
||||||
|
//NOTE(martina): This component behaves unusually sometimes when there is a click on an SVG. It will count it as an out of rectangle event. Solve this issue with adding { pointerEvents: "none" } to the SVG
|
||||||
export class Boundary extends React.PureComponent {
|
export class Boundary extends React.PureComponent {
|
||||||
static defaultProps = {
|
static defaultProps = {
|
||||||
className: undefined,
|
className: undefined,
|
||||||
|
@ -75,15 +75,18 @@ export default async (req, res) => {
|
|||||||
} else {
|
} else {
|
||||||
newObjects = [req.body.data];
|
newObjects = [req.body.data];
|
||||||
}
|
}
|
||||||
const isArray = req.body.data && req.body.data.length;
|
|
||||||
if (isArray) {
|
|
||||||
newObjects = [...req.body.data];
|
|
||||||
} else {
|
|
||||||
newObjects = [req.body.data];
|
|
||||||
}
|
|
||||||
|
|
||||||
//data takes an array rather than a single one now
|
let slateIDs = slate.data.objects.map((file) => file.id);
|
||||||
let addlObjects = newObjects.map((each) => {
|
let newIDs = [];
|
||||||
|
let addlObjects = newObjects
|
||||||
|
.filter((each) => {
|
||||||
|
if (slateIDs.includes(each.id) || newIDs.includes(each.id)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
newIDs.push(each.id);
|
||||||
|
return true;
|
||||||
|
})
|
||||||
|
.map((each) => {
|
||||||
let cid = each.ipfs.replace("/ipfs/", "");
|
let cid = each.ipfs.replace("/ipfs/", "");
|
||||||
return {
|
return {
|
||||||
id: each.id,
|
id: each.id,
|
||||||
@ -124,7 +127,10 @@ export default async (req, res) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return res
|
return res.status(200).send({
|
||||||
.status(200)
|
decorator: "SERVER_SLATE_ADD_TO_SLATE",
|
||||||
.send({ decorator: "SERVER_SLATE_ADD_TO_SLATE", slate });
|
slate,
|
||||||
|
added: addlObjects.length,
|
||||||
|
skipped: newObjects.length - addlObjects.length,
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user