Visual Console Client: WIP work on the line item

Former-commit-id: 0f40636ebd9d01ccdf618579e5e7c25be015ad04
This commit is contained in:
Alejandro Gallardo Escobar 2019-03-08 14:05:31 +01:00
parent c0f8c289e6
commit 1eaf187215
2 changed files with 67 additions and 10 deletions

View File

@ -45,16 +45,6 @@ export interface ItemProps extends Position, Size {
aclGroupId: number | null; aclGroupId: number | null;
} }
interface VisualConsoleLineItemProps {
readonly id: number;
readonly type: 13;
isOnTop: boolean;
startPosition: Position;
endPosition: Position;
borderWidth: string;
borderColor: string;
}
// FIXME: Fix type compatibility. // FIXME: Fix type compatibility.
export interface ItemClickEvent<Props extends ItemProps> { export interface ItemClickEvent<Props extends ItemProps> {
// data: Props; // data: Props;

View File

@ -0,0 +1,67 @@
import { UnknownObject, Position } from "../types";
import { parseIntOr, notEmptyStringOr } from "../lib";
import Item, { ItemType, ItemProps, itemBasePropsDecoder } from "../Item";
interface LineProps extends ItemProps {
// Overrided properties.
readonly type: ItemType.LINE_ITEM;
label: null;
isLinkEnabled: false;
parentId: null;
aclGroupId: null;
// Clear Position & Size.
x: 0;
y: 0;
width: 0;
height: 0;
// Custom properties.
startPosition: Position;
endPosition: Position;
lineWidth: number;
color: string | null;
}
/**
* Build a valid typed object from a raw object.
* This will allow us to ensure the type safety.
*
* @param data Raw object.
* @return An object representing the item props.
* @throws Will throw a TypeError if some property
* is missing from the raw object or have an invalid type.
*/
export function linePropsDecoder(data: UnknownObject): LineProps | never {
return {
...itemBasePropsDecoder(data), // Object spread. It will merge the properties of the two objects.
type: ItemType.LINE_ITEM,
label: null,
isLinkEnabled: false,
parentId: null,
aclGroupId: null,
// Clear Position & Size.
x: 0,
y: 0,
width: 0,
height: 0,
// Custom properties.
startPosition: {
x: 0,
y: 0
},
endPosition: {
x: 0,
y: 0
},
lineWidth: parseIntOr(data.lineWidth, 0),
color: notEmptyStringOr(data.color, null)
};
}
export default class Line extends Item<LineProps> {
public createDomElement(): HTMLElement {
const line: HTMLDivElement = document.createElement("div");
line.className = "line";
return line;
}
}