github.com/erda-project/erda-infra@v1.0.9/providers/component-protocol/examples/components/kanban_demo/kanban/provider.go (about) 1 // Copyright (c) 2021 Terminus, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package kanban 16 17 import ( 18 "fmt" 19 20 "github.com/erda-project/erda-infra/providers/component-protocol/components/kanban" 21 "github.com/erda-project/erda-infra/providers/component-protocol/components/kanban/impl" 22 "github.com/erda-project/erda-infra/providers/component-protocol/cptype" 23 "github.com/erda-project/erda-infra/providers/component-protocol/utils/cputil" 24 "github.com/erda-project/erda-infra/providers/i18n" 25 ) 26 27 type component struct { 28 impl.DefaultKanban 29 30 Tran i18n.Translator `translator:"notbelong"` 31 32 // custom type 33 StatePtr *CustomState 34 InParamsPtr *CustomInParams 35 } 36 37 const ( 38 nonStdOp1Key = "NonStdOp1" 39 ) 40 41 const ( 42 boardLabelUrgent = "URGENT" 43 boardLabelNormal = "NORMAL" 44 ) 45 46 var ( 47 boardUrgent = kanban.Board{ 48 ID: boardLabelUrgent, 49 Title: "紧急", 50 Cards: nil, 51 PageNo: 1, 52 PageSize: 20, 53 Total: 0, 54 } 55 boardNormal = kanban.Board{ 56 ID: boardLabelNormal, 57 Title: "普通", 58 Cards: nil, 59 PageNo: 1, 60 PageSize: 20, 61 Total: 0, 62 } 63 card1 = kanban.Card{ 64 ID: "1", 65 Title: "task1", 66 Extra: cptype.Extra{ 67 Extra: map[string]interface{}{ 68 "userID": "2", 69 "status": "Done", 70 }, 71 }, 72 Operations: map[cptype.OperationKey]cptype.Operation{ 73 kanban.OpCardMoveTo{}.OpKey(): cputil.NewOpBuilder(). 74 WithAsync(true). 75 WithServerDataPtr(&kanban.OpCardMoveToServerData{AllowedTargetBoardIDs: []string{boardLabelUrgent, boardLabelNormal}}). 76 Build(), 77 // Test Non-Std op 78 nonStdOp1Key: cputil.NewOpBuilder().Build(), 79 }, 80 } 81 ) 82 83 func (c *component) registerNonStdOp1() cptype.OperationFunc { 84 return func(sdk *cptype.SDK) cptype.IStdStructuredPtr { 85 fmt.Println("This is NonStdOp1") 86 return nil 87 } 88 } 89 90 // RegisterCompNonStdOps . 91 func (c *component) RegisterCompNonStdOps() (opFuncs map[cptype.OperationKey]cptype.OperationFunc) { 92 return map[cptype.OperationKey]cptype.OperationFunc{ 93 nonStdOp1Key: c.registerNonStdOp1(), 94 } 95 } 96 97 // RegisterInitializeOp . 98 func (c *component) RegisterInitializeOp() (opFunc cptype.OperationFunc) { 99 return func(sdk *cptype.SDK) cptype.IStdStructuredPtr { 100 data := kanban.Data{ 101 Boards: []kanban.Board{boardUrgent, boardNormal}, 102 Operations: nil, 103 } 104 // multi instance demo 105 switch sdk.Comp.Name { 106 case "instance1": 107 fmt.Println("this is instance1") 108 c.StatePtr.Name = "instance1" 109 case "instance2": 110 fmt.Println("this is instance2") 111 c.StatePtr.Name = "instance2" 112 default: 113 fmt.Println("this is a kanban instance") 114 c.StatePtr.Name = "Bob" 115 } 116 boardUrgent.Cards = append([]kanban.Card{}, card1) 117 boardUrgent.Total = 1 118 c.StdDataPtr = &data 119 // custom inParams 120 c.InParamsPtr.ProjectID = 20 121 fmt.Println("hello", c.Tran.Text(i18n.LanguageCodes{{Code: "zh"}}, "hello")) 122 return nil 123 } 124 } 125 126 // RegisterRenderingOp . 127 func (c *component) RegisterRenderingOp() (opFunc cptype.OperationFunc) { 128 return c.RegisterInitializeOp() 129 } 130 131 // RegisterCardMoveToOp . 132 func (c *component) RegisterCardMoveToOp(opData kanban.OpCardMoveTo) (opFunc cptype.OperationFunc) { 133 return func(sdk *cptype.SDK) cptype.IStdStructuredPtr { 134 fmt.Println("hello world, i am drag:", opData) 135 switch v := (cptype.ExtraMap)(*c.StdStatePtr).String("DropTarget"); v { 136 case boardLabelUrgent: 137 boardUrgent.Cards = append(boardUrgent.Cards, card1) 138 boardNormal.Cards = nil 139 c.StdDataPtr.Boards = []kanban.Board{boardUrgent, boardNormal} 140 case boardLabelNormal: 141 boardUrgent.Cards = nil 142 boardNormal.Cards = append(boardNormal.Cards, card1) 143 c.StdDataPtr.Boards = []kanban.Board{boardUrgent, boardNormal} 144 default: 145 panic(fmt.Errorf("invalid drop target: %s", v)) 146 } 147 return nil 148 } 149 } 150 151 // RegisterBoardLoadMoreOp . 152 func (c *component) RegisterBoardLoadMoreOp(opData kanban.OpBoardLoadMore) (opFunc cptype.OperationFunc) { 153 return func(sdk *cptype.SDK) cptype.IStdStructuredPtr { 154 fmt.Println("hello change page no op:", opData) 155 return nil 156 } 157 } 158 159 // RegisterBoardCreateOp . 160 func (c *component) RegisterBoardCreateOp(opData kanban.OpBoardCreate) (opFunc cptype.OperationFunc) { 161 return func(sdk *cptype.SDK) cptype.IStdStructuredPtr { 162 fmt.Println("hello create board op:", opData) 163 c.StdDataPtr.Boards = append(c.StdDataPtr.Boards, kanban.Board{ID: opData.ClientData.Title, Title: opData.ClientData.Title}) 164 return nil 165 } 166 } 167 168 // Initialize . 169 func (c *component) Initialize(sdk *cptype.SDK) { return } 170 171 // Visible . 172 func (c *component) Visible(sdk *cptype.SDK) bool { return true } 173 174 // RegisterBoardUpdateOp . 175 func (c *component) RegisterBoardUpdateOp(opData kanban.OpBoardUpdate) (opFunc cptype.OperationFunc) { 176 return nil 177 } 178 179 // RegisterBoardDeleteOp . 180 func (c *component) RegisterBoardDeleteOp(opData kanban.OpBoardDelete) (opFunc cptype.OperationFunc) { 181 return nil 182 }