29610
client/package-lock.json
generated
29610
client/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -17,10 +17,10 @@
|
|||||||
"@reduxjs/toolkit": "^2.2.4",
|
"@reduxjs/toolkit": "^2.2.4",
|
||||||
"@sentry/cli": "^2.31.2",
|
"@sentry/cli": "^2.31.2",
|
||||||
"@sentry/react": "^7.114.0",
|
"@sentry/react": "^7.114.0",
|
||||||
"@splitsoftware/splitio-react": "^1.11.1",
|
"@splitsoftware/splitio-react": "^1.12.0",
|
||||||
"@tanem/react-nprogress": "^5.0.51",
|
"@tanem/react-nprogress": "^5.0.51",
|
||||||
"@vitejs/plugin-react": "^4.2.1",
|
"@vitejs/plugin-react": "^4.2.1",
|
||||||
"antd": "^5.17.0",
|
"antd": "^5.17.2",
|
||||||
"apollo-link-logger": "^2.0.1",
|
"apollo-link-logger": "^2.0.1",
|
||||||
"apollo-link-sentry": "^3.3.0",
|
"apollo-link-sentry": "^3.3.0",
|
||||||
"autosize": "^6.0.1",
|
"autosize": "^6.0.1",
|
||||||
@@ -32,9 +32,9 @@
|
|||||||
"dotenv": "^16.4.5",
|
"dotenv": "^16.4.5",
|
||||||
"env-cmd": "^10.1.0",
|
"env-cmd": "^10.1.0",
|
||||||
"exifr": "^7.1.3",
|
"exifr": "^7.1.3",
|
||||||
"firebase": "^10.11.1",
|
"firebase": "^10.12.0",
|
||||||
"graphql": "^16.6.0",
|
"graphql": "^16.6.0",
|
||||||
"i18next": "^23.11.3",
|
"i18next": "^23.11.4",
|
||||||
"i18next-browser-languagedetector": "^7.2.1",
|
"i18next-browser-languagedetector": "^7.2.1",
|
||||||
"immutability-helper": "^3.1.1",
|
"immutability-helper": "^3.1.1",
|
||||||
"kuika-smooth-dnd": "^1.0.0",
|
"kuika-smooth-dnd": "^1.0.0",
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
"react-product-fruits": "^2.2.6",
|
"react-product-fruits": "^2.2.6",
|
||||||
"react-redux": "^9.1.2",
|
"react-redux": "^9.1.2",
|
||||||
"react-resizable": "^3.0.5",
|
"react-resizable": "^3.0.5",
|
||||||
"react-router-dom": "^6.23.0",
|
"react-router-dom": "^6.23.1",
|
||||||
"react-scripts": "^5.0.1",
|
"react-scripts": "^5.0.1",
|
||||||
"react-sticky": "^6.0.3",
|
"react-sticky": "^6.0.3",
|
||||||
"react-virtualized": "^9.22.5",
|
"react-virtualized": "^9.22.5",
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
"redux-saga": "^1.3.0",
|
"redux-saga": "^1.3.0",
|
||||||
"redux-state-sync": "^3.1.4",
|
"redux-state-sync": "^3.1.4",
|
||||||
"reselect": "^5.1.0",
|
"reselect": "^5.1.0",
|
||||||
"sass": "^1.77.0",
|
"sass": "^1.77.1",
|
||||||
"socket.io-client": "^4.7.5",
|
"socket.io-client": "^4.7.5",
|
||||||
"styled-components": "^6.1.11",
|
"styled-components": "^6.1.11",
|
||||||
"subscriptions-transport-ws": "^0.11.0",
|
"subscriptions-transport-ws": "^0.11.0",
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ const CardColorLegend = ({ bodyshop }) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Col>
|
<Col style={{ marginLeft: "15px" }}>
|
||||||
<Typography>{t("production.labels.legend")}</Typography>
|
<Typography>{t("production.labels.legend")}</Typography>
|
||||||
<List
|
<List
|
||||||
grid={{
|
grid={{
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { SyncOutlined } from "@ant-design/icons";
|
import { SyncOutlined, UnorderedListOutlined } from "@ant-design/icons";
|
||||||
import { useApolloClient } from "@apollo/client";
|
import { useApolloClient } from "@apollo/client";
|
||||||
import Board from "../../components/trello-board/index";
|
import Board from "../../components/trello-board/index";
|
||||||
import { Button, Grid, notification, Space, Statistic } from "antd";
|
import { Button, Grid, notification, Space, Statistic } from "antd";
|
||||||
@@ -54,7 +54,10 @@ export function ProductionBoardKanbanComponent({
|
|||||||
|
|
||||||
const [isMoving, setIsMoving] = useState(false);
|
const [isMoving, setIsMoving] = useState(false);
|
||||||
|
|
||||||
|
const [orientation, setOrientation] = useState("vertical");
|
||||||
|
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const boardData = createBoardData(
|
const boardData = createBoardData(
|
||||||
[...bodyshop.md_ro_statuses.production_statuses, ...(bodyshop.md_ro_statuses.additional_board_statuses || [])],
|
[...bodyshop.md_ro_statuses.production_statuses, ...(bodyshop.md_ro_statuses.additional_board_statuses || [])],
|
||||||
@@ -71,6 +74,11 @@ export function ProductionBoardKanbanComponent({
|
|||||||
|
|
||||||
const client = useApolloClient();
|
const client = useApolloClient();
|
||||||
|
|
||||||
|
// Create a function that toggles the orientation when the button is clicked
|
||||||
|
const toggleOrientation = () => {
|
||||||
|
setOrientation((prevOrientation) => (prevOrientation === "horizontal" ? "vertical" : "horizontal"));
|
||||||
|
};
|
||||||
|
|
||||||
const handleDragEnd = async (cardId, sourceLaneId, targetLaneId, position, cardDetails) => {
|
const handleDragEnd = async (cardId, sourceLaneId, targetLaneId, position, cardDetails) => {
|
||||||
logImEXEvent("kanban_drag_end");
|
logImEXEvent("kanban_drag_end");
|
||||||
|
|
||||||
@@ -106,33 +114,41 @@ export function ProductionBoardKanbanComponent({
|
|||||||
}
|
}
|
||||||
const newChildCardNewParent = newChildCard ? cardId : null;
|
const newChildCardNewParent = newChildCard ? cardId : null;
|
||||||
|
|
||||||
const update = await client.mutate({
|
try {
|
||||||
mutation: generate_UPDATE_JOB_KANBAN(
|
const update = await client.mutate({
|
||||||
oldChildCard ? oldChildCard.id : null,
|
mutation: generate_UPDATE_JOB_KANBAN(
|
||||||
oldChildCardNewParent,
|
oldChildCard ? oldChildCard.id : null,
|
||||||
cardId,
|
oldChildCardNewParent,
|
||||||
movedCardNewKanbanParent,
|
cardId,
|
||||||
targetLaneId,
|
movedCardNewKanbanParent,
|
||||||
newChildCard ? newChildCard.id : null,
|
targetLaneId,
|
||||||
newChildCardNewParent
|
newChildCard ? newChildCard.id : null,
|
||||||
)
|
newChildCardNewParent
|
||||||
});
|
)
|
||||||
|
});
|
||||||
|
|
||||||
insertAuditTrail({
|
insertAuditTrail({
|
||||||
jobid: cardId,
|
jobid: cardId,
|
||||||
operation: AuditTrailMapping.jobstatuschange(targetLaneId),
|
operation: AuditTrailMapping.jobstatuschange(targetLaneId),
|
||||||
type: "jobstatuschange"
|
type: "jobstatuschange"
|
||||||
});
|
});
|
||||||
|
|
||||||
if (update.errors) {
|
if (update.errors) {
|
||||||
|
notification["error"]({
|
||||||
|
message: t("production.errors.boardupdate", {
|
||||||
|
message: JSON.stringify(update.errors)
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
notification["error"]({
|
notification["error"]({
|
||||||
message: t("production.errors.boardupdate", {
|
message: t("production.errors.boardupdate", {
|
||||||
message: JSON.stringify(update.errors)
|
message: error.message
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
} finally {
|
||||||
|
setIsMoving(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
setIsMoving(false);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const totalHrs = data
|
const totalHrs = data
|
||||||
@@ -174,7 +190,7 @@ export function ProductionBoardKanbanComponent({
|
|||||||
<Sticky>
|
<Sticky>
|
||||||
{({ style }) => (
|
{({ style }) => (
|
||||||
<div className="react-trello-column-header" style={{ ...style, zIndex: "99", backgroundColor: "#e3e3e3" }}>
|
<div className="react-trello-column-header" style={{ ...style, zIndex: "99", backgroundColor: "#e3e3e3" }}>
|
||||||
{title}
|
<UnorderedListOutlined style={{ marginRight: "5px" }} /> {title}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</Sticky>
|
</Sticky>
|
||||||
@@ -182,7 +198,7 @@ export function ProductionBoardKanbanComponent({
|
|||||||
|
|
||||||
const NormalHeader = ({ title }) => (
|
const NormalHeader = ({ title }) => (
|
||||||
<div className="react-trello-column-header" style={{ backgroundColor: "#e3e3e3" }}>
|
<div className="react-trello-column-header" style={{ backgroundColor: "#e3e3e3" }}>
|
||||||
{title}
|
<UnorderedListOutlined style={{ marginRight: "5px" }} /> {title}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -229,6 +245,7 @@ export function ProductionBoardKanbanComponent({
|
|||||||
</Button>
|
</Button>
|
||||||
<ProductionBoardFilters filter={filter} setFilter={setFilter} loading={isMoving} />
|
<ProductionBoardFilters filter={filter} setFilter={setFilter} loading={isMoving} />
|
||||||
<ProductionBoardKanbanCardSettings associationSettings={associationSettings} />
|
<ProductionBoardKanbanCardSettings associationSettings={associationSettings} />
|
||||||
|
<Button onClick={toggleOrientation}>Toggle Orientation</Button>
|
||||||
</Space>
|
</Space>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
@@ -242,6 +259,8 @@ export function ProductionBoardKanbanComponent({
|
|||||||
handleDragEnd={handleDragEnd}
|
handleDragEnd={handleDragEnd}
|
||||||
style={{ height: "100%", backgroundColor: "transparent" }}
|
style={{ height: "100%", backgroundColor: "transparent" }}
|
||||||
components={components}
|
components={components}
|
||||||
|
orientation={orientation}
|
||||||
|
collapsibleLanes
|
||||||
/>
|
/>
|
||||||
</StickyContainer>
|
</StickyContainer>
|
||||||
) : (
|
) : (
|
||||||
@@ -252,6 +271,8 @@ export function ProductionBoardKanbanComponent({
|
|||||||
handleDragEnd={handleDragEnd}
|
handleDragEnd={handleDragEnd}
|
||||||
style={{ backgroundColor: "transparent" }}
|
style={{ backgroundColor: "transparent" }}
|
||||||
components={components}
|
components={components}
|
||||||
|
collapsibleLanes
|
||||||
|
orientation={orientation}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -6,10 +6,11 @@ import NewLaneForm from "./NewLaneForm.jsx";
|
|||||||
import NewCardForm from "./NewCardForm.jsx";
|
import NewCardForm from "./NewCardForm.jsx";
|
||||||
import AddCardLink from "./AddCardLink";
|
import AddCardLink from "./AddCardLink";
|
||||||
import NewLaneSection from "./NewLaneSection.jsx";
|
import NewLaneSection from "./NewLaneSection.jsx";
|
||||||
import { BoardWrapper, GlobalStyle, ScrollableLane, Section } from "../styles/Base";
|
import { BoardWrapper, GlobalStyleHorizontal, GlobalStyleVertical, ScrollableLane, Section } from "../styles/Base";
|
||||||
|
|
||||||
const exports = {
|
const exports = {
|
||||||
GlobalStyle,
|
GlobalStyleHorizontal,
|
||||||
|
GlobalStyleVertical,
|
||||||
BoardWrapper,
|
BoardWrapper,
|
||||||
Loader,
|
Loader,
|
||||||
ScrollableLane,
|
ScrollableLane,
|
||||||
|
|||||||
@@ -3,15 +3,22 @@ import classNames from "classnames";
|
|||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import { v1 } from "uuid";
|
import { v1 } from "uuid";
|
||||||
|
|
||||||
const Board = ({ id, className, components, ...additionalProps }) => {
|
const Board = ({ id, className, components, orientation, ...additionalProps }) => {
|
||||||
const [storeId] = useState(id || v1());
|
const [storeId] = useState(id || v1());
|
||||||
|
|
||||||
const allClassNames = classNames("react-trello-board", className || "");
|
const allClassNames = classNames("react-trello-board", className || "");
|
||||||
|
|
||||||
|
const Styles = orientation === "horizontal" ? components.GlobalStyleHorizontal : components.GlobalStyleVertical;
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<components.GlobalStyle />
|
<Styles />
|
||||||
<BoardContainer components={components} {...additionalProps} id={storeId} className={allClassNames} />
|
<BoardContainer
|
||||||
|
components={components}
|
||||||
|
orientation={orientation}
|
||||||
|
{...additionalProps}
|
||||||
|
id={storeId}
|
||||||
|
className={allClassNames}
|
||||||
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -141,12 +141,13 @@ class BoardContainer extends Component {
|
|||||||
laneStyle,
|
laneStyle,
|
||||||
onCardMoveAcrossLanes,
|
onCardMoveAcrossLanes,
|
||||||
t,
|
t,
|
||||||
|
orientation,
|
||||||
...otherProps
|
...otherProps
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
const { addLaneMode } = this.state;
|
const { addLaneMode } = this.state;
|
||||||
// Stick to whitelisting attributes to segregate board and lane props
|
// Stick to whitelisting attributes to segregate board and lane props
|
||||||
const passthroughProps = pick(this.props, [
|
const passThroughProps = pick(this.props, [
|
||||||
"onCardMoveAcrossLanes",
|
"onCardMoveAcrossLanes",
|
||||||
"onLaneScroll",
|
"onLaneScroll",
|
||||||
"onLaneDelete",
|
"onLaneDelete",
|
||||||
@@ -169,19 +170,19 @@ class BoardContainer extends Component {
|
|||||||
"handleDragEnd",
|
"handleDragEnd",
|
||||||
"cardDragClass",
|
"cardDragClass",
|
||||||
"editLaneTitle",
|
"editLaneTitle",
|
||||||
"t"
|
"orientation"
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<components.BoardWrapper style={style} {...otherProps} draggable={false}>
|
<components.BoardWrapper style={style} orientation={orientation} {...otherProps} draggable={false}>
|
||||||
<PopoverWrapper>
|
<PopoverWrapper>
|
||||||
<Container
|
<Container
|
||||||
orientation="horizontal"
|
orientation={orientation === "vertical" ? "vertical" : "horizontal"}
|
||||||
onDragStart={this.onDragStart}
|
onDragStart={this.onDragStart}
|
||||||
dragClass={laneDragClass}
|
dragClass={laneDragClass}
|
||||||
dropClass={laneDropClass}
|
dropClass={laneDropClass}
|
||||||
onDrop={this.onLaneDrop}
|
onDrop={this.onLaneDrop}
|
||||||
lockAxis="x"
|
lockAxis={orientation === "vertical" ? "y" : "x"}
|
||||||
getChildPayload={(index) => this.getLaneDetails(index)}
|
getChildPayload={(index) => this.getLaneDetails(index)}
|
||||||
groupName={this.groupName}
|
groupName={this.groupName}
|
||||||
>
|
>
|
||||||
@@ -201,7 +202,7 @@ class BoardContainer extends Component {
|
|||||||
cardStyle={this.props.cardStyle || lane.cardStyle}
|
cardStyle={this.props.cardStyle || lane.cardStyle}
|
||||||
editable={editable && !lane.disallowAddingCard}
|
editable={editable && !lane.disallowAddingCard}
|
||||||
{...otherProps}
|
{...otherProps}
|
||||||
{...passthroughProps}
|
{...passThroughProps}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
return draggable && laneDraggable ? <Draggable key={lane.id}>{laneToRender}</Draggable> : laneToRender;
|
return draggable && laneDraggable ? <Draggable key={lane.id}>{laneToRender}</Draggable> : laneToRender;
|
||||||
@@ -209,9 +210,9 @@ class BoardContainer extends Component {
|
|||||||
</Container>
|
</Container>
|
||||||
</PopoverWrapper>
|
</PopoverWrapper>
|
||||||
{canAddLanes && (
|
{canAddLanes && (
|
||||||
<Container orientation="horizontal">
|
<Container orientation={orientation === "vertical" ? "vertical" : "horizontal"}>
|
||||||
{editable && !addLaneMode ? (
|
{editable && !addLaneMode ? (
|
||||||
<components.NewLaneSection t={t} onClick={this.showEditableLane} />
|
<components.NewLaneSection onClick={this.showEditableLane} />
|
||||||
) : (
|
) : (
|
||||||
addLaneMode && <components.NewLaneForm onCancel={this.hideEditableLane} onAdd={this.addNewLane} t={t} />
|
addLaneMode && <components.NewLaneForm onCancel={this.hideEditableLane} onAdd={this.addNewLane} t={t} />
|
||||||
)}
|
)}
|
||||||
@@ -257,7 +258,9 @@ BoardContainer.propTypes = {
|
|||||||
cardDragClass: PropTypes.string,
|
cardDragClass: PropTypes.string,
|
||||||
laneDragClass: PropTypes.string,
|
laneDragClass: PropTypes.string,
|
||||||
laneDropClass: PropTypes.string,
|
laneDropClass: PropTypes.string,
|
||||||
onCardMoveAcrossLanes: PropTypes.func.isRequired
|
onCardMoveAcrossLanes: PropTypes.func.isRequired,
|
||||||
|
t: PropTypes.func,
|
||||||
|
orientation: PropTypes.string
|
||||||
};
|
};
|
||||||
|
|
||||||
BoardContainer.defaultProps = {
|
BoardContainer.defaultProps = {
|
||||||
@@ -281,7 +284,8 @@ BoardContainer.defaultProps = {
|
|||||||
cardDraggable: true,
|
cardDraggable: true,
|
||||||
cardDragClass: "react_trello_dragClass",
|
cardDragClass: "react_trello_dragClass",
|
||||||
laneDragClass: "react_trello_dragLaneClass",
|
laneDragClass: "react_trello_dragLaneClass",
|
||||||
laneDropClass: ""
|
laneDropClass: "",
|
||||||
|
orientation: "horizontal"
|
||||||
};
|
};
|
||||||
|
|
||||||
const mapStateToProps = (state) => {
|
const mapStateToProps = (state) => {
|
||||||
|
|||||||
@@ -157,7 +157,8 @@ class Lane extends Component {
|
|||||||
cardDropClass,
|
cardDropClass,
|
||||||
tagStyle,
|
tagStyle,
|
||||||
cardStyle,
|
cardStyle,
|
||||||
components
|
components,
|
||||||
|
orientation
|
||||||
} = this.props;
|
} = this.props;
|
||||||
const { addCardMode, collapsed } = this.state;
|
const { addCardMode, collapsed } = this.state;
|
||||||
|
|
||||||
@@ -191,7 +192,7 @@ class Lane extends Component {
|
|||||||
return (
|
return (
|
||||||
<components.ScrollableLane ref={this.laneDidMount} isDraggingOver={isDraggingOver}>
|
<components.ScrollableLane ref={this.laneDidMount} isDraggingOver={isDraggingOver}>
|
||||||
<Container
|
<Container
|
||||||
orientation="vertical" // TODO This is where we would switch the card orientation.
|
// orientation={orientation === "horizontal" ? "vertical" : "horizontal"}
|
||||||
groupName={this.groupName}
|
groupName={this.groupName}
|
||||||
dragClass={cardDragClass}
|
dragClass={cardDragClass}
|
||||||
dropClass={cardDropClass}
|
dropClass={cardDropClass}
|
||||||
@@ -254,6 +255,7 @@ class Lane extends Component {
|
|||||||
onLaneUpdate,
|
onLaneUpdate,
|
||||||
onCardUpdate,
|
onCardUpdate,
|
||||||
onCardMoveAcrossLanes,
|
onCardMoveAcrossLanes,
|
||||||
|
orientation,
|
||||||
...otherProps
|
...otherProps
|
||||||
} = this.props;
|
} = this.props;
|
||||||
const allClassNames = classNames("react-trello-lane", this.props.className || "");
|
const allClassNames = classNames("react-trello-lane", this.props.className || "");
|
||||||
@@ -265,6 +267,7 @@ class Lane extends Component {
|
|||||||
onClick={() => onLaneClick && onLaneClick(id)}
|
onClick={() => onLaneClick && onLaneClick(id)}
|
||||||
draggable={false}
|
draggable={false}
|
||||||
className={allClassNames}
|
className={allClassNames}
|
||||||
|
orientation={orientation}
|
||||||
>
|
>
|
||||||
{this.renderHeader({ id, cards, ...otherProps })}
|
{this.renderHeader({ id, cards, ...otherProps })}
|
||||||
{this.renderDragContainer(isDraggingOver)}
|
{this.renderDragContainer(isDraggingOver)}
|
||||||
@@ -308,7 +311,13 @@ Lane.propTypes = {
|
|||||||
cardDraggable: PropTypes.bool,
|
cardDraggable: PropTypes.bool,
|
||||||
cardDragClass: PropTypes.string,
|
cardDragClass: PropTypes.string,
|
||||||
cardDropClass: PropTypes.string,
|
cardDropClass: PropTypes.string,
|
||||||
canAddLanes: PropTypes.bool
|
canAddLanes: PropTypes.bool,
|
||||||
|
hideCardDeleteIcon: PropTypes.bool,
|
||||||
|
components: PropTypes.object,
|
||||||
|
getCardDetails: PropTypes.func,
|
||||||
|
handleDragStart: PropTypes.func,
|
||||||
|
handleDragEnd: PropTypes.func,
|
||||||
|
orientation: PropTypes.string
|
||||||
};
|
};
|
||||||
|
|
||||||
Lane.defaultProps = {
|
Lane.defaultProps = {
|
||||||
@@ -319,7 +328,25 @@ Lane.defaultProps = {
|
|||||||
editable: false,
|
editable: false,
|
||||||
onLaneUpdate: () => {},
|
onLaneUpdate: () => {},
|
||||||
onCardAdd: () => {},
|
onCardAdd: () => {},
|
||||||
onCardUpdate: () => {}
|
onCardUpdate: () => {},
|
||||||
|
onCardDelete: () => {},
|
||||||
|
onBeforeCardDelete: () => {},
|
||||||
|
onLaneDelete: () => {},
|
||||||
|
onLaneClick: () => {},
|
||||||
|
onLaneScroll: () => {},
|
||||||
|
onCardClick: () => {},
|
||||||
|
onCardMoveAcrossLanes: () => {},
|
||||||
|
draggable: false,
|
||||||
|
laneDraggable: false,
|
||||||
|
cardDraggable: true,
|
||||||
|
collapsibleLanes: false,
|
||||||
|
droppable: true,
|
||||||
|
canAddLanes: false,
|
||||||
|
hideCardDeleteIcon: false,
|
||||||
|
components: {},
|
||||||
|
handleDragStart: () => {},
|
||||||
|
handleDragEnd: () => {},
|
||||||
|
orientation: "vertical"
|
||||||
};
|
};
|
||||||
|
|
||||||
const mapDispatchToProps = (dispatch) => ({
|
const mapDispatchToProps = (dispatch) => ({
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
const REPLACE_TABLE = {
|
|
||||||
customLaneHeader: "components.LaneHeader",
|
|
||||||
newLaneTemplate: "components.NewLaneSection",
|
|
||||||
newCardTemplate: "components.NewCardForm",
|
|
||||||
children: "components.Card",
|
|
||||||
customCardLayout: "components.Card",
|
|
||||||
addLaneTitle: '`t` function with key "Add another lane"',
|
|
||||||
addCardLink: '`t` function with key "Click to add card"'
|
|
||||||
};
|
|
||||||
|
|
||||||
const warn = (prop) => {
|
|
||||||
const use = REPLACE_TABLE[prop];
|
|
||||||
console.warn(
|
|
||||||
`react-trello property '${prop}' is removed. Use '${use}' instead. More - https://github.com/rcdexta/react-trello/blob/master/UPGRADE.md`
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const deprecationWarning = (props) => {
|
|
||||||
Object.keys(REPLACE_TABLE).forEach((key) => {
|
|
||||||
if (props.hasOwnProperty(key)) {
|
|
||||||
warn(key);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export default deprecationWarning;
|
|
||||||
@@ -5,7 +5,6 @@ import Container from "./dnd/Container.jsx";
|
|||||||
import BoardContainer from "./controllers/BoardContainer.jsx";
|
import BoardContainer from "./controllers/BoardContainer.jsx";
|
||||||
import Board from "./controllers/Board.jsx";
|
import Board from "./controllers/Board.jsx";
|
||||||
import Lane from "./controllers/Lane.jsx";
|
import Lane from "./controllers/Lane.jsx";
|
||||||
import deprecationWarnings from "./helpers/deprecationWarnings";
|
|
||||||
import DefaultComponents from "./components";
|
import DefaultComponents from "./components";
|
||||||
|
|
||||||
import widgets from "./widgets/index";
|
import widgets from "./widgets/index";
|
||||||
@@ -19,8 +18,6 @@ export { DefaultComponents as components };
|
|||||||
|
|
||||||
// Enhanced default export using arrow function for simplicity
|
// Enhanced default export using arrow function for simplicity
|
||||||
const TrelloBoard = ({ components, ...otherProps }) => {
|
const TrelloBoard = ({ components, ...otherProps }) => {
|
||||||
deprecationWarnings(otherProps);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<StyleSheetManager shouldForwardProp={shouldForwardProp}>
|
<StyleSheetManager shouldForwardProp={shouldForwardProp}>
|
||||||
<Board components={{ ...DefaultComponents, ...components }} {...otherProps} />
|
<Board components={{ ...DefaultComponents, ...components }} {...otherProps} />
|
||||||
|
|||||||
@@ -1,7 +1,30 @@
|
|||||||
import { PopoverContainer, PopoverContent } from "react-popopo";
|
import { PopoverContainer, PopoverContent } from "react-popopo";
|
||||||
import styled, { createGlobalStyle, css } from "styled-components";
|
import styled, { createGlobalStyle, css } from "styled-components";
|
||||||
|
|
||||||
export const GlobalStyle = createGlobalStyle`
|
const getBoardWrapperStyles = (props) => {
|
||||||
|
if (props.orientation === "vertical") {
|
||||||
|
return ` `;
|
||||||
|
}
|
||||||
|
if (props.orientation === "horizontal") {
|
||||||
|
return `
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: flex-start;
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
const getSectionStyles = (props) => {
|
||||||
|
if (props.orientation === "horizontal") {
|
||||||
|
return `
|
||||||
|
display: inline-flex;
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
export const GlobalStyleHorizontal = createGlobalStyle`
|
||||||
.comPlainTextContentEditable {
|
.comPlainTextContentEditable {
|
||||||
-webkit-user-modify: read-write-plaintext-only;
|
-webkit-user-modify: read-write-plaintext-only;
|
||||||
cursor: text;
|
cursor: text;
|
||||||
@@ -25,9 +48,11 @@ export const GlobalStyle = createGlobalStyle`
|
|||||||
.icon-overflow-menu-horizontal:before {
|
.icon-overflow-menu-horizontal:before {
|
||||||
content: "\\E91F";
|
content: "\\E91F";
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon-lg, .icon-sm {
|
.icon-lg, .icon-sm {
|
||||||
color: #798d99;
|
color: #798d99;
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon-lg {
|
.icon-lg {
|
||||||
height: 32px;
|
height: 32px;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
@@ -36,6 +61,69 @@ export const GlobalStyle = createGlobalStyle`
|
|||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
export const GlobalStyleVertical = createGlobalStyle`
|
||||||
|
.comPlainTextContentEditable {
|
||||||
|
-webkit-user-modify: read-write-plaintext-only;
|
||||||
|
cursor: text;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.comPlainTextContentEditable--has-placeholder::before {
|
||||||
|
content: attr(placeholder);
|
||||||
|
opacity: 0.5;
|
||||||
|
color: inherit;
|
||||||
|
cursor: text;
|
||||||
|
}
|
||||||
|
|
||||||
|
.react_trello_dragClass {
|
||||||
|
transform: rotate(3deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.react_trello_dragLaneClass {
|
||||||
|
transform: rotate(3deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-overflow-menu-horizontal:before {
|
||||||
|
content: "\\E91F";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-lg, .icon-sm {
|
||||||
|
color: #798d99;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-lg {
|
||||||
|
height: 32px;
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 32px;
|
||||||
|
width: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.smooth-dnd-container {
|
||||||
|
//min-height: 100px; // Not needed, just for extra landing space
|
||||||
|
}
|
||||||
|
|
||||||
|
.smooth-dnd-container.horizontal {
|
||||||
|
white-space: break-spaces;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.react-trello-lane {
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.react-trello-column-header {
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 5px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.react-trello-board {
|
||||||
|
overflow-y: hidden !important;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
export const CustomPopoverContainer = styled(PopoverContainer)`
|
export const CustomPopoverContainer = styled(PopoverContainer)`
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 10px;
|
right: 10px;
|
||||||
@@ -58,6 +146,7 @@ export const CustomPopoverContent = styled(PopoverContent)`
|
|||||||
padding: 5px;
|
padding: 5px;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
transform: translateX(-50%);
|
transform: translateX(-50%);
|
||||||
|
|
||||||
${(props) =>
|
${(props) =>
|
||||||
props.active &&
|
props.active &&
|
||||||
`
|
`
|
||||||
@@ -67,11 +156,13 @@ export const CustomPopoverContent = styled(PopoverContent)`
|
|||||||
`} &::before {
|
`} &::before {
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: rgba(255, 255, 255, 0.56);
|
color: rgba(255, 255, 255, 0.56);
|
||||||
padding: 0.5em 1em;
|
padding: 0.5em 1em;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: #00bcd4 !important;
|
background-color: #00bcd4 !important;
|
||||||
color: #37474f;
|
color: #37474f;
|
||||||
@@ -85,11 +176,7 @@ export const BoardWrapper = styled.div`
|
|||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
color: #393939;
|
color: #393939;
|
||||||
display: flex;
|
${getBoardWrapperStyles};
|
||||||
flex-direction: row;
|
|
||||||
align-items: flex-start;
|
|
||||||
// TODO: This was commented out to match existing board style
|
|
||||||
//height: 100vh;
|
|
||||||
`;
|
`;
|
||||||
|
|
||||||
export const Header = styled.header`
|
export const Header = styled.header`
|
||||||
@@ -105,9 +192,7 @@ export const Section = styled.section`
|
|||||||
margin: 5px 5px;
|
margin: 5px 5px;
|
||||||
position: relative;
|
position: relative;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
display: inline-flex;
|
${getSectionStyles};
|
||||||
// TODO: This was commented out to match existing board style
|
|
||||||
//max-height: 90%;
|
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
`;
|
`;
|
||||||
|
|
||||||
@@ -282,6 +367,7 @@ export const InlineInput = styled.textarea`
|
|||||||
border: 0;
|
border: 0;
|
||||||
padding: 0 8px;
|
padding: 0 8px;
|
||||||
outline: 0;
|
outline: 0;
|
||||||
|
|
||||||
${(props) =>
|
${(props) =>
|
||||||
props.border &&
|
props.border &&
|
||||||
css`
|
css`
|
||||||
|
|||||||
Reference in New Issue
Block a user