Skip to content

Commit

Permalink
feat(confirm): split style
Browse files Browse the repository at this point in the history
  • Loading branch information
fzdwx committed May 9, 2023
1 parent 3d77305 commit 69b0123
Show file tree
Hide file tree
Showing 4 changed files with 125 additions and 66 deletions.
2 changes: 1 addition & 1 deletion _examples/confirm/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
func main() {

c := inf.NewConfirm(
confirm.WithPure(),
//confirm.WithPure(),
confirm.WithDefaultYes(),
//confirm.WithDisableOutputResult(),
//confirm.WithPrompt("hello world?"),
Expand Down
68 changes: 26 additions & 42 deletions components/input/confirm/inner.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,46 +21,30 @@ type inner struct {
// display help? default is false
DisplayHelp bool
// default is false
Value bool
Notice string
NoticeStyle *style.Style

FocusSymbol string
UnFocusSymbol string
FocusInterval string
UnFocusInterval string
FocusSymbolStyle *style.Style
UnFocusSymbolStyle *style.Style
FocusIntervalStyle *style.Style
UnFocusIntervalStyle *style.Style
PromptStyle *style.Style
ValueStyle *style.Style
OutputResult bool
Value bool
ValueStyle *style.Style

FocusStyle *Style
UnFocusStyle *Style

// OutputResult is whether to output the result to the screen
OutputResult bool

status components.Status
}

func newInner() *inner {
i := &inner{
input: components.NewInput(),
KeyMap: DefaultKeyMap(),
Help: help.New(),
DisplayHelp: false,
Value: false,
Notice: " ( y/N )",
NoticeStyle: style.New(),
PromptStyle: style.New(),
FocusSymbol: theme.DefaultTheme.FocusSymbol,
UnFocusSymbol: theme.DefaultTheme.UnFocusSymbol,
FocusInterval: theme.DefaultTheme.FocusInterval,
UnFocusInterval: theme.DefaultTheme.UnFocusInterval,
FocusSymbolStyle: theme.DefaultTheme.FocusSymbolStyle,
UnFocusSymbolStyle: theme.DefaultTheme.UnFocusSymbolStyle,
FocusIntervalStyle: theme.DefaultTheme.FocusIntervalStyle,
UnFocusIntervalStyle: theme.DefaultTheme.UnFocusIntervalStyle,
ValueStyle: theme.DefaultTheme.ChoiceTextStyle.Underline(),
status: components.Normal,
OutputResult: true,
input: components.NewInput(),
KeyMap: DefaultKeyMap(),
Help: help.New(),
DisplayHelp: false,
Value: false,
ValueStyle: theme.DefaultTheme.ChoiceTextStyle.Underline(),
status: components.Normal,
OutputResult: true,
UnFocusStyle: UnFocusStyle(),
FocusStyle: FocusStyle(),
}

i.input.Prompt = "Are you handsome?"
Expand All @@ -71,17 +55,17 @@ func newInner() *inner {
// Init confirm
func (i *inner) Init() tea.Cmd {
focusPrompt := strx.NewFluent().
Style(i.FocusSymbolStyle, i.FocusSymbol).
Style(i.PromptStyle, i.input.Prompt).
Style(i.NoticeStyle, i.Notice).
Style(i.FocusIntervalStyle, i.FocusInterval).
Style(i.FocusStyle.SymbolStyle, i.FocusStyle.Symbol).
Style(i.FocusStyle.PromptStyle, i.input.Prompt).
Style(i.FocusStyle.NoticeStyle, i.FocusStyle.Notice).
Style(i.FocusStyle.IntervalStyle, i.FocusStyle.Interval).
String()

unFocusPrompt := strx.NewFluent().
Style(i.UnFocusSymbolStyle, i.UnFocusSymbol).
Style(i.PromptStyle, i.input.Prompt).
Style(i.NoticeStyle, i.Notice).
Style(i.UnFocusIntervalStyle, i.UnFocusInterval[:len(i.UnFocusInterval)-1]).
Style(i.UnFocusStyle.SymbolStyle, i.UnFocusStyle.Symbol).
Style(i.UnFocusStyle.PromptStyle, i.input.Prompt).
Style(i.UnFocusStyle.NoticeStyle, i.UnFocusStyle.Notice).
Style(i.UnFocusStyle.IntervalStyle, i.UnFocusStyle.Interval[:len(i.UnFocusStyle.Interval)-1]).
String()

i.input.OutputResult = false
Expand Down
70 changes: 47 additions & 23 deletions components/input/confirm/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,8 @@ type Option func(confirm *Confirm)
// any options you customize will be cleared
func WithPure() Option {
return func(i *Confirm) {
i.inner.FocusSymbolStyle = style.New()
i.inner.UnFocusSymbolStyle = style.New()
i.inner.FocusIntervalStyle = style.New()
i.inner.UnFocusIntervalStyle = style.New()
i.inner.FocusStyle = resetStyle(i.inner.FocusStyle)
i.inner.UnFocusStyle = resetStyle(i.inner.UnFocusStyle)
i.inner.ValueStyle = style.New()
}
}
Expand Down Expand Up @@ -48,9 +46,11 @@ func WithPrompt(prompt string) Option {
}

// WithPromptStyle change `confirm` default promptStyle.
// Deprecated: use WithFocusStyle or WithUnFocusStyle instead.
func WithPromptStyle(style *style.Style) Option {
return func(c *Confirm) {
c.inner.PromptStyle = style
c.inner.FocusStyle.PromptStyle = style
c.inner.UnFocusStyle.PromptStyle = style
}
}

Expand All @@ -69,71 +69,95 @@ func WithDisplayHelp() Option {
}

// WithNotice replace notice, default is " ( y/N ) ".
// Deprecated: use WithFocusStyle or WithUnFocusStyle instead.
func WithNotice(notice string) Option {
return func(c *Confirm) {
c.inner.Notice = notice
c.inner.FocusStyle.Notice = notice
c.inner.UnFocusStyle.Notice = notice
}
}

// WithNoticeStyle replace notice style.
// Deprecated: use WithFocusStyle or WithUnFocusStyle instead.
func WithNoticeStyle(style *style.Style) Option {
return func(c *Confirm) {
c.inner.NoticeStyle = style
c.inner.FocusStyle.NoticeStyle = style
c.inner.UnFocusStyle.NoticeStyle = style
}
}

// WithFocusSymbol default is theme.DefaultTheme#FocusSymbol
// WithFocusSymbol default is FocusStyle#Symbol
// Deprecated: use WithFocusStyle or WithUnFocusStyle instead.
func WithFocusSymbol(s string) Option {
return func(confirm *Confirm) {
confirm.inner.FocusSymbol = s
confirm.inner.FocusStyle.Symbol = s
}
}

// WithUnFocusSymbol default is theme.DefaultTheme#UnFocusSymbol
// WithUnFocusSymbol default is UnFocusStyle#Symbol
// Deprecated: use WithFocusStyle or WithUnFocusStyle instead.
func WithUnFocusSymbol(s string) Option {
return func(confirm *Confirm) {
confirm.inner.UnFocusSymbol = s
confirm.inner.UnFocusStyle.Symbol = s
}
}

// WithFocusInterval default is theme.DefaultTheme#FocusInterval
// WithFocusInterval default FocusStyle#Interval
// Deprecated: use WithFocusStyle or WithUnFocusStyle instead.
func WithFocusInterval(s string) Option {
return func(confirm *Confirm) {
confirm.inner.FocusInterval = s
confirm.inner.FocusStyle.Interval = s
}
}

// WithUnFocusInterval default is theme.DefaultTheme#UnFocusInterval
// WithUnFocusInterval default is UnFocusStyle#Interval
// Deprecated: use WithFocusStyle or WithUnFocusStyle instead.
func WithUnFocusInterval(s string) Option {
return func(confirm *Confirm) {
confirm.inner.UnFocusInterval = s
confirm.inner.UnFocusStyle.Interval = s
}
}

// WithFocusSymbolStyle default is theme.DefaultTheme#FocusSymbolStyle
// WithFocusSymbolStyle default is FocusStyle#SymbolStyle
// Deprecated: use WithFocusStyle or WithUnFocusStyle instead.
func WithFocusSymbolStyle(s *style.Style) Option {
return func(confirm *Confirm) {
confirm.inner.FocusSymbolStyle = s
confirm.inner.FocusStyle.SymbolStyle = s
}
}

// WithUnFocusSymbolStyle default is theme.DefaultTheme#UnFocusIntervalStyle
// WithUnFocusSymbolStyle default is UnFocusStyle#SymbolStyle
// Deprecated: use WithFocusStyle or WithUnFocusStyle instead.
func WithUnFocusSymbolStyle(s *style.Style) Option {
return func(confirm *Confirm) {
confirm.inner.UnFocusSymbolStyle = s
confirm.inner.UnFocusStyle.SymbolStyle = s
}
}

// WithFocusIntervalStyle default is theme.DefaultTheme#FocusIntervalStyle
// WithFocusIntervalStyle default is FocusStyle#IntervalStyle
// Deprecated: use WithFocusStyle or WithUnFocusStyle instead.
func WithFocusIntervalStyle(s *style.Style) Option {
return func(confirm *Confirm) {
confirm.inner.FocusIntervalStyle = s
confirm.inner.FocusStyle.IntervalStyle = s
}
}

// WithUnFocusIntervalStyle default is theme.DefaultTheme#UnFocusIntervalStyle
// WithUnFocusIntervalStyle default is UnFocusStyle#IntervalStyle
// Deprecated: use WithFocusStyle or WithUnFocusStyle instead.
func WithUnFocusIntervalStyle(s *style.Style) Option {
return func(confirm *Confirm) {
confirm.inner.UnFocusIntervalStyle = s
confirm.inner.UnFocusStyle.IntervalStyle = s
}
}

func WithFocusStyle(s *Style) Option {
return func(confirm *Confirm) {
confirm.inner.FocusStyle = s
}
}

func WithUnFocusStyle(s *Style) Option {
return func(confirm *Confirm) {
confirm.inner.UnFocusStyle = s
}
}
51 changes: 51 additions & 0 deletions components/input/confirm/style.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package confirm

import (
"github.com/fzdwx/infinite/style"
"github.com/fzdwx/infinite/theme"
)

type Style struct {
SymbolStyle *style.Style
Symbol string

IntervalStyle *style.Style
Interval string

NoticeStyle *style.Style
Notice string

PromptStyle *style.Style
}

func resetStyle(s *Style) *Style {
s.SymbolStyle = style.New()
s.IntervalStyle = style.New()
s.NoticeStyle = style.New()
s.PromptStyle = style.New()
return s
}

func FocusStyle() *Style {
return &Style{
Symbol: theme.DefaultTheme.FocusSymbol,
Interval: theme.DefaultTheme.FocusInterval,
SymbolStyle: theme.DefaultTheme.FocusSymbolStyle,
IntervalStyle: theme.DefaultTheme.FocusIntervalStyle,
PromptStyle: theme.DefaultTheme.PromptStyle,
NoticeStyle: style.New(),
Notice: " ( y/N )",
}
}

func UnFocusStyle() *Style {
return &Style{
Symbol: theme.DefaultTheme.UnFocusSymbol,
Interval: theme.DefaultTheme.UnFocusInterval,
SymbolStyle: theme.DefaultTheme.UnFocusSymbolStyle,
IntervalStyle: theme.DefaultTheme.UnFocusIntervalStyle,
PromptStyle: theme.DefaultTheme.PromptStyle,
NoticeStyle: style.New(),
Notice: " ( y/N )",
}
}

0 comments on commit 69b0123

Please sign in to comment.