🎨 Add Rollup column to database table view https://github.com/siyuan-note/siyuan/issues/9958

This commit is contained in:
Daniel 2024-01-01 16:19:49 +08:00
parent d9a0d89668
commit 5c8bab48ed
No known key found for this signature in database
GPG key ID: 86211BA83DF03017

View file

@ -531,9 +531,8 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) {
case CalcOperatorSum:
sum := 0.0
for _, v := range r.Contents {
if "" != v.String() {
n, _ := strconv.ParseFloat(v.String(), 64)
sum += n
if nil != v.Number {
sum += v.Number.Content
}
}
r.Contents = []*Value{{Type: KeyTypeNumber, Number: NewValueNumber(sum)}}
@ -541,9 +540,8 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) {
sum := 0.0
count := 0
for _, v := range r.Contents {
if "" != v.String() {
n, _ := strconv.ParseFloat(v.String(), 64)
sum += n
if nil != v.Number {
sum += v.Number.Content
count++
}
}
@ -553,9 +551,8 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) {
case CalcOperatorMedian:
var numbers []float64
for _, v := range r.Contents {
if "" != v.String() {
n, _ := strconv.ParseFloat(v.String(), 64)
numbers = append(numbers, n)
if nil != v.Number {
numbers = append(numbers, v.Number.Content)
}
}
sort.Float64s(numbers)
@ -565,10 +562,9 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) {
case CalcOperatorMin:
min := math.MaxFloat64
for _, v := range r.Contents {
if "" != v.String() {
n, _ := strconv.ParseFloat(v.String(), 64)
if n < min {
min = n
if nil != v.Number {
if v.Number.Content < min {
min = v.Number.Content
}
}
}
@ -576,10 +572,9 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) {
case CalcOperatorMax:
max := -math.MaxFloat64
for _, v := range r.Contents {
if "" != v.String() {
n, _ := strconv.ParseFloat(v.String(), 64)
if n > max {
max = n
if nil != v.Number {
if v.Number.Content > max {
max = v.Number.Content
}
}
}
@ -588,13 +583,12 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) {
min := math.MaxFloat64
max := -math.MaxFloat64
for _, v := range r.Contents {
if "" != v.String() {
n, _ := strconv.ParseFloat(v.String(), 64)
if n < min {
min = n
if nil != v.Number {
if v.Number.Content < min {
min = v.Number.Content
}
if n > max {
max = n
if v.Number.Content > max {
max = v.Number.Content
}
}
}
@ -602,32 +596,40 @@ func (r *ValueRollup) RenderContents(calc *RollupCalc) {
case CalcOperatorChecked:
countChecked := 0
for _, v := range r.Contents {
if "√" == v.String() {
countChecked++
if nil != v.Checkbox {
if v.Checkbox.Checked {
countChecked++
}
}
}
r.Contents = []*Value{{Type: KeyTypeNumber, Number: NewValueNumber(float64(countChecked))}}
case CalcOperatorUnchecked:
countUnchecked := 0
for _, v := range r.Contents {
if "√" != v.String() {
countUnchecked++
if nil != v.Checkbox {
if !v.Checkbox.Checked {
countUnchecked++
}
}
}
r.Contents = []*Value{{Type: KeyTypeNumber, Number: NewValueNumber(float64(countUnchecked))}}
case CalcOperatorPercentChecked:
countChecked := 0
for _, v := range r.Contents {
if "√" == v.String() {
countChecked++
if nil != v.Checkbox {
if v.Checkbox.Checked {
countChecked++
}
}
}
r.Contents = []*Value{{Type: KeyTypeNumber, Number: NewValueNumber(float64(countChecked * 100 / len(r.Contents)))}}
case CalcOperatorPercentUnchecked:
countUnchecked := 0
for _, v := range r.Contents {
if "√" != v.String() {
countUnchecked++
if nil != v.Checkbox {
if !v.Checkbox.Checked {
countUnchecked++
}
}
}
r.Contents = []*Value{{Type: KeyTypeNumber, Number: NewValueNumber(float64(countUnchecked * 100 / len(r.Contents)))}}