This commit is contained in:
Vanessa 2023-11-20 11:19:56 +08:00
parent 06bb1de768
commit 1840502b04
5 changed files with 82 additions and 62 deletions

View file

@ -169,6 +169,7 @@
opacity: 0;
overflow: hidden;
font-size: 75%;
white-space: nowrap;
&.av__calc--ashow {
opacity: 1;

View file

@ -254,3 +254,75 @@ export const openCalcMenu = (protyle: IProtyle, calcElement: HTMLElement) => {
const calcRect = calcElement.getBoundingClientRect();
menu.open({x: calcRect.left, y: calcRect.bottom, h: calcRect.height});
};
export const getCalcValue = (column: IAVColumn) => {
if (!column.calc || !column.calc.result) {
return "";
}
let resultCalc: any = column.calc.result.number;
if (column.calc.operator === "Earliest" || column.calc.operator === "Latest" ||
(column.calc.operator === "Range" && ["date", "created", "updated"].includes(column.type))) {
resultCalc = column.calc.result[column.type as "date"];
}
let value = "";
switch (column.calc.operator) {
case "Count all":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultCountAll}`;
break;
case "Count values":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultCountValues}`;
break;
case "Count unique values":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultCountUniqueValues}`;
break;
case "Count empty":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultCountEmpty}`;
break;
case "Count not empty":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultCountNotEmpty}`;
break;
case "Percent empty":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultPercentEmpty}`;
break;
case "Percent not empty":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultPercentNotEmpty}`;
break;
case "Sum":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultSum}`;
break;
case "Average":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultAverage}`;
break;
case "Median":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultMedian}`;
break;
case "Min":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultMin}`;
break;
case "Max":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultMax}`;
break;
case "Range":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultRange}`;
break;
case "Earliest":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcOperatorEarliest}`;
break;
case "Latest":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcOperatorLatest}`;
break;
case "Checked":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.checked}`;
break;
case "Unchecked":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.unchecked}`;
break;
case "Percent checked":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.percentChecked}`;
break;
case "Percent unchecked":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.percentUnchecked}`;
break;
}
return value;
};

View file

@ -9,66 +9,6 @@ import {fetchPost} from "../../../util/fetch";
import {focusBlock} from "../../util/selection";
import * as dayjs from "dayjs";
export const getCalcValue = (column: IAVColumn) => {
if (!column.calc || !column.calc.result) {
return "";
}
let resultCalc: any = column.calc.result.number;
if (column.calc.operator === "Earliest" || column.calc.operator === "Latest" ||
(column.calc.operator === "Range" && ["date", "created", "updated"].includes(column.type))) {
resultCalc = column.calc.result[column.type as "date"];
}
let value = "";
switch (column.calc.operator) {
case "Count all":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultCountAll}`;
break;
case "Count values":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultCountValues}`;
break;
case "Count unique values":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultCountUniqueValues}`;
break;
case "Count empty":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultCountEmpty}`;
break;
case "Count not empty":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultCountNotEmpty}`;
break;
case "Percent empty":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultPercentEmpty}`;
break;
case "Percent not empty":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultPercentNotEmpty}`;
break;
case "Sum":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultSum}`;
break;
case "Average":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultAverage}`;
break;
case "Median":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultMedian}`;
break;
case "Min":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultMin}`;
break;
case "Max":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultMax}`;
break;
case "Range":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcResultRange}`;
break;
case "Earliest":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcOperatorEarliest}`;
break;
case "Latest":
value = `<span>${resultCalc.formattedContent}</span>${window.siyuan.languages.calcOperatorLatest}`;
break;
}
return value;
};
export const genCellValue = (colType: TAVCol, value: string | any) => {
let cellValue: IAVCellValue;
if (typeof value === "string") {

View file

@ -186,7 +186,11 @@ export const getEditHTML = (options: {
</div>`;
};
export const bindEditEvent = (options: { protyle: IProtyle, data: IAV, menuElement: HTMLElement }) => {
export const bindEditEvent = (options: {
protyle: IProtyle,
data: IAV,
menuElement: HTMLElement
}) => {
const avID = options.data.id;
const colId = options.menuElement.querySelector(".b3-menu__item").getAttribute("data-col-id");
const colData = options.data.view.columns.find((item: IAVColumn) => item.id === colId);
@ -323,6 +327,8 @@ export const getColNameByType = (type: TAVCol) => {
return window.siyuan.languages.link;
case "mAsset":
return window.siyuan.languages.assets;
case "checkbox":
return window.siyuan.languages.checkbox;
}
};

View file

@ -1,13 +1,14 @@
import {fetchPost} from "../../../util/fetch";
import {getColIconByType} from "./col";
import {Constants} from "../../../constants";
import {getCalcValue, popTextCell} from "./cell";
import {popTextCell} from "./cell";
import * as dayjs from "dayjs";
import {unicode2Emoji} from "../../../emoji";
import {focusBlock} from "../../util/selection";
import {isMac} from "../../util/compatibility";
import {hasClosestByClassName} from "../../util/hasClosest";
import {stickyRow} from "./row";
import {getCalcValue} from "./calc";
export const avRender = (element: Element, protyle: IProtyle, cb?: () => void) => {
let avElements: Element[] = [];