♻️ update date

This commit is contained in:
Vanessa 2023-12-29 14:56:00 +08:00
parent aa2b52bad9
commit c70031ed3a
3 changed files with 47 additions and 120 deletions

View file

@ -516,7 +516,10 @@ export const updateCellsValue = (protyle: IProtyle, nodeElement: HTMLElement, va
} }
} }
cellElements.forEach((item: HTMLElement) => { cellElements.forEach((item: HTMLElement, elementIndex) => {
if (!nodeElement.contains(item)) {
item = cellElements[elementIndex] = nodeElement.querySelector(`.av__cell[data-id="${item.dataset.id}"]`) as HTMLElement;
}
const rowElement = hasClosestByClassName(item, "av__row"); const rowElement = hasClosestByClassName(item, "av__row");
if (!rowElement) { if (!rowElement) {
return; return;

View file

@ -1,9 +1,6 @@
import {transaction} from "../../wysiwyg/transaction";
import * as dayjs from "dayjs"; import * as dayjs from "dayjs";
import {updateAttrViewCellAnimation} from "./action";
import {genAVValueHTML} from "./blockAttr";
import {hasClosestByClassName} from "../../util/hasClosest"; import {hasClosestByClassName} from "../../util/hasClosest";
import {genCellValueByElement, getTypeByCellElement} from "./cell"; import {updateCellsValue} from "./cell";
export const getDateHTML = (data: IAVTable, cellElements: HTMLElement[]) => { export const getDateHTML = (data: IAVTable, cellElements: HTMLElement[]) => {
let hasEndDate = true; let hasEndDate = true;
@ -70,31 +67,25 @@ export const bindDateEvent = (options: {
const inputElements: NodeListOf<HTMLInputElement> = options.menuElement.querySelectorAll("input"); const inputElements: NodeListOf<HTMLInputElement> = options.menuElement.querySelectorAll("input");
inputElements[0].addEventListener("change", () => { inputElements[0].addEventListener("change", () => {
inputElements[0].dataset.value = inputElements[0].value.length > 10 ? inputElements[0].value : inputElements[0].value + " 00:00"; inputElements[0].dataset.value = inputElements[0].value.length > 10 ? inputElements[0].value : inputElements[0].value + " 00:00";
setDateValue({ updateCellsValue(options.protyle, options.blockElement as HTMLElement, {
cellElements: options.cellElements,
data: options.data,
protyle: options.protyle,
blockElement: options.blockElement,
value: {
isNotEmpty: inputElements[0].value !== "",
content: new Date(inputElements[0].dataset.value).getTime(), content: new Date(inputElements[0].dataset.value).getTime(),
isNotTime: !inputElements[3].checked isNotEmpty: inputElements[0].value !== "",
} content2: new Date(inputElements[1].dataset.value).getTime(),
}); isNotEmpty2: inputElements[1].value !== "",
hasEndDate: inputElements[2].checked,
isNotTime: !inputElements[3].checked,
}, options.cellElements);
}); });
inputElements[1].addEventListener("change", () => { inputElements[1].addEventListener("change", () => {
inputElements[1].dataset.value = inputElements[1].value.length > 10 ? inputElements[1].value : inputElements[1].value + " 00:00"; inputElements[1].dataset.value = inputElements[1].value.length > 10 ? inputElements[1].value : inputElements[1].value + " 00:00";
setDateValue({ updateCellsValue(options.protyle, options.blockElement as HTMLElement, {
cellElements: options.cellElements, content: new Date(inputElements[0].dataset.value).getTime(),
data: options.data, isNotEmpty: inputElements[0].value !== "",
protyle: options.protyle,
blockElement: options.blockElement,
value: {
isNotEmpty2: inputElements[1].value !== "",
content2: new Date(inputElements[1].dataset.value).getTime(), content2: new Date(inputElements[1].dataset.value).getTime(),
isNotTime: !inputElements[3].checked isNotEmpty2: inputElements[1].value !== "",
} hasEndDate: inputElements[2].checked,
}); isNotTime: !inputElements[3].checked,
}, options.cellElements);
}); });
inputElements[2].addEventListener("change", () => { inputElements[2].addEventListener("change", () => {
if (inputElements[2].checked) { if (inputElements[2].checked) {
@ -102,16 +93,14 @@ export const bindDateEvent = (options: {
} else { } else {
inputElements[1].classList.add("fn__none"); inputElements[1].classList.add("fn__none");
} }
setDateValue({ updateCellsValue(options.protyle, options.blockElement as HTMLElement, {
cellElements: options.cellElements, content: new Date(inputElements[0].dataset.value).getTime(),
data: options.data, isNotEmpty: inputElements[0].value !== "",
blockElement: options.blockElement, content2: new Date(inputElements[1].dataset.value).getTime(),
protyle: options.protyle, isNotEmpty2: inputElements[1].value !== "",
value: {
hasEndDate: inputElements[2].checked, hasEndDate: inputElements[2].checked,
isNotTime: !inputElements[3].checked isNotTime: !inputElements[3].checked,
} }, options.cellElements);
});
}); });
inputElements[3].addEventListener("change", () => { inputElements[3].addEventListener("change", () => {
if (inputElements[3].checked) { if (inputElements[3].checked) {
@ -129,73 +118,13 @@ export const bindDateEvent = (options: {
inputElements[0].value = inputElements[0].dataset.value.substring(0, 10); inputElements[0].value = inputElements[0].dataset.value.substring(0, 10);
inputElements[1].value = inputElements[1].dataset.value.substring(0, 10); inputElements[1].value = inputElements[1].dataset.value.substring(0, 10);
} }
setDateValue({ updateCellsValue(options.protyle, options.blockElement as HTMLElement, {
cellElements: options.cellElements, content: new Date(inputElements[0].dataset.value).getTime(),
data: options.data, isNotEmpty: inputElements[0].value !== "",
blockElement: options.blockElement, content2: new Date(inputElements[1].dataset.value).getTime(),
protyle: options.protyle, isNotEmpty2: inputElements[1].value !== "",
value: { hasEndDate: inputElements[2].checked,
isNotTime: !inputElements[3].checked isNotTime: !inputElements[3].checked,
} }, options.cellElements);
});
}); });
}; };
export const setDateValue = (options: {
cellElements: HTMLElement[],
data: IAV
protyle: IProtyle,
value: IAVCellDateValue,
blockElement: Element
}) => {
const colId = options.cellElements[0].dataset.colId;
const cellDoOperations: IOperation[] = [];
const cellUndoOperations: IOperation[] = [];
options.cellElements.forEach((item, elementIndex) => {
if (!options.blockElement.contains(item)) {
item = options.cellElements[elementIndex] = options.blockElement.querySelector(`.av__cell[data-id="${item.dataset.id}"]`) as HTMLElement;
}
const cellValue = genCellValueByElement(getTypeByCellElement(item) || item.dataset.type as TAVCol, item);
const oldValue = JSON.parse(JSON.stringify(cellValue))
const rowID = (hasClosestByClassName(item, "av__row") as HTMLElement).dataset.id;
if (elementIndex === 0) {
cellValue.date = Object.assign(cellValue.date || {
isNotEmpty2: false,
isNotEmpty: false
}, options.value);
}
cellDoOperations.push({
action: "updateAttrViewCell",
id: cellValue.id,
keyID: colId,
rowID,
avID: options.data.id,
data: cellValue
});
cellUndoOperations.push({
action: "updateAttrViewCell",
id: cellValue.id,
keyID: colId,
rowID,
avID: options.data.id,
data: oldValue
});
options.data.view.rows.find(row => {
if (row.id === rowID) {
row.cells.find(cell => {
if (cell.id === cellValue.id) {
cell.value = cellValue;
return true;
}
});
return true;
}
});
if (item.classList.contains("custom-attr__avvalue")) {
item.innerHTML = genAVValueHTML(cellValue);
} else {
updateAttrViewCellAnimation(item, cellValue);
}
});
transaction(options.protyle, cellDoOperations, cellUndoOperations);
};

View file

@ -7,7 +7,7 @@ import {hasClosestByAttribute, hasClosestByClassName} from "../../util/hasCloses
import {bindSelectEvent, getSelectHTML, addColOptionOrCell, setColOption, removeCellOption} from "./select"; import {bindSelectEvent, getSelectHTML, addColOptionOrCell, setColOption, removeCellOption} from "./select";
import {addFilter, getFiltersHTML, setFilter} from "./filter"; import {addFilter, getFiltersHTML, setFilter} from "./filter";
import {addSort, bindSortsEvent, getSortsHTML} from "./sort"; import {addSort, bindSortsEvent, getSortsHTML} from "./sort";
import {bindDateEvent, getDateHTML, setDateValue} from "./date"; import {bindDateEvent, getDateHTML} from "./date";
import {formatNumber} from "./number"; import {formatNumber} from "./number";
import {removeAttrViewColAnimation, updateAttrViewCellAnimation} from "./action"; import {removeAttrViewColAnimation, updateAttrViewCellAnimation} from "./action";
import {addAssetLink, bindAssetEvent, editAssetItem, getAssetHTML, updateAssetCell} from "./asset"; import {addAssetLink, bindAssetEvent, editAssetItem, getAssetHTML, updateAssetCell} from "./asset";
@ -28,6 +28,7 @@ import {avRender} from "./render";
import {setPageSize} from "./row"; import {setPageSize} from "./row";
import {bindRelationEvent, getRelationHTML, openSearchAV, setRelationCell, updateRelation} from "./relation"; import {bindRelationEvent, getRelationHTML, openSearchAV, setRelationCell, updateRelation} from "./relation";
import {goSearchRollupCalc, goSearchRollupCol, goSearchRollupTarget} from "./rollup"; import {goSearchRollupCalc, goSearchRollupCol, goSearchRollupTarget} from "./rollup";
import {updateCellsValue} from "./cell";
export const openMenuPanel = (options: { export const openMenuPanel = (options: {
protyle: IProtyle, protyle: IProtyle,
@ -1009,20 +1010,14 @@ export const openMenuPanel = (options: {
event.stopPropagation(); event.stopPropagation();
break; break;
} else if (type === "clearDate") { } else if (type === "clearDate") {
setDateValue({ updateCellsValue(options.protyle, options.blockElement as HTMLElement, {
cellElements: options.cellElements,
data,
protyle: options.protyle,
blockElement: options.blockElement,
value: {
isNotEmpty2: false, isNotEmpty2: false,
isNotEmpty: false, isNotEmpty: false,
content: null, content: null,
content2: null, content2: null,
hasEndDate: false, hasEndDate: false,
isNotTime: true, isNotTime: true,
} }, options.cellElements);
});
avPanelElement.remove(); avPanelElement.remove();
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();