Files
upstream-traggo/dashboard/convert/position.go
upstream-mirror cda7c1a474
Some checks failed
build / build (push) Failing after 3s
snapshot of https://github.com/traggo/server.git (master, 2026-09-16; blobs > 131072B omitted)
2026-09-16 05:24:45 +05:00

112 lines
2.2 KiB
Go

package convert
import (
"encoding/json"
"github.com/jinzhu/copier"
"github.com/rs/zerolog/log"
"github.com/traggo/server/generated/gqlmodel"
"github.com/traggo/server/model"
)
func enhancePos(pos *gqlmodel.DashboardEntryPos, size string) *gqlmodel.DashboardEntryPos {
switch size {
case "mobile":
pos.MinH = 2
pos.MinW = 1
case "desktop":
pos.MinH = 3
pos.MinW = 2
default:
panic("unknown size")
}
if pos.MinW > pos.W {
pos.W = pos.MinW
}
if pos.MinH > pos.H {
pos.H = pos.MinH
}
return pos
}
// EmptyPos returns a empty position.
func EmptyPos() string {
internal := internalDashboardPositionV1{
Version: "v1",
H: 0,
W: 0,
X: 0,
Y: 0,
}
if bytes, err := json.Marshal(&internal); err != nil {
panic(err)
} else {
return string(bytes)
}
}
func toInternalPosition(external gqlmodel.InputDashboardEntryPos) (string, error) {
internal := internalDashboardPositionV1{Version: "v1"}
if err := copier.Copy(&internal, &external); err != nil {
return "", err
}
bytes, err := json.Marshal(&internal)
if err != nil {
return "", err
}
return string(bytes), nil
}
// ApplyPos copies the position to the external position.
func ApplyPos(entry *model.DashboardEntry, pos *gqlmodel.InputResponsiveDashboardEntryPos) error {
if pos == nil {
return nil
}
if pos.Mobile != nil {
lpos, err := toInternalPosition(*pos.Mobile)
if err != nil {
return err
}
entry.MobilePosition = lpos
}
if pos.Desktop != nil {
mpos, err := toInternalPosition(*pos.Desktop)
if err != nil {
return err
}
entry.DesktopPosition = mpos
}
return nil
}
func toExternalPosition(pos string) (*gqlmodel.DashboardEntryPos, error) {
if pos == "" {
return nil, nil
}
internal := internalDashboardPositionV1{}
if err := json.Unmarshal([]byte(pos), &internal); err != nil {
return nil, err
}
if internal.Version != "v1" {
log.Error().Interface("pos", internal).Msg("Invalid position version")
}
external := gqlmodel.DashboardEntryPos{}
if err := copier.Copy(&external, &internal); err != nil {
return nil, err
}
return &external, nil
}
type internalDashboardPositionV1 struct {
Version string
W int `json:"w"`
H int `json:"h"`
X int `json:"x"`
Y int `json:"y"`
}