Skip to content

Commit

Permalink
feat: add support to change spinner text using event updates (#2944)
Browse files Browse the repository at this point in the history
* refactor: change `StartSpinner` option to receive an optional text

* feat: add progress update support for events and session print loop

This change allows to print event texts that will be removed when the
spinner stops or when another event status update text is printed.

* refactor: add `ProgressUpdate` to some of the events

This is required so the event updates are cleared once another event
update is received or when the spinner stops.

* refactor: rename event progress options

* feat: add `cliui.StartSpinnerWithText` option to session

* test: add test for event update

* chore: update changelog

* chore: updated some network commands to use progress update

* chore: review corrections

Co-authored-by: Alex Johnson <[email protected]>
Co-authored-by: Lucas Bertrand <[email protected]>

* chore: update changelog

Co-authored-by: Alex Johnson <[email protected]>
Co-authored-by: Lucas Bertrand <[email protected]>
  • Loading branch information
3 people authored Oct 28, 2022
1 parent 54b1b97 commit d942df8
Show file tree
Hide file tree
Showing 44 changed files with 191 additions and 160 deletions.
1 change: 1 addition & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
- [#2958](https://github.com/ignite/cli/pull/2958) Support absolute paths for client code generation config paths.
- [#2993](https://github.com/ignite/cli/pull/2993) Hide `ignite scaffold band` command and deprecate functionality.
- [#2991](https://github.com/ignite/cli/pull/2991) Hide `ignite scaffold flutter` command and remove functionality.
- [#2944](https://github.com/ignite/cli/pull/2944) Add a new event "update" status option to `pkg/cliui`.

## [`v0.25.1`](https://github.com/ignite/cli/releases/tag/v0.25.1)

Expand Down
5 changes: 4 additions & 1 deletion ignite/cmd/chain_build.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,10 @@ func chainBuildHandler(cmd *cobra.Command, _ []string) error {
releaseTargets, _ = cmd.Flags().GetStringSlice(flagReleaseTargets)
releasePrefix, _ = cmd.Flags().GetString(flagReleasePrefix)
output, _ = cmd.Flags().GetString(flagOutput)
session = cliui.New(cliui.WithVerbosity(getVerbosity(cmd)), cliui.StartSpinner())
session = cliui.New(
cliui.WithVerbosity(getVerbosity(cmd)),
cliui.StartSpinner(),
)
)

defer session.End()
Expand Down
5 changes: 4 additions & 1 deletion ignite/cmd/chain_serve.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,10 @@ production, you may want to run "appd start" manually.
}

func chainServeHandler(cmd *cobra.Command, args []string) error {
session := cliui.New(cliui.WithVerbosity(getVerbosity(cmd)), cliui.StartSpinner())
session := cliui.New(
cliui.WithVerbosity(getVerbosity(cmd)),
cliui.StartSpinner(),
)
defer session.End()

chainOption := []chain.Option{
Expand Down
3 changes: 3 additions & 0 deletions ignite/cmd/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ const (

checkVersionTimeout = time.Millisecond * 600
cacheFileName = "ignite_cache.db"

statusGenerating = "Generating..."
statusQuerying = "Querying..."
)

// New creates a new root command for `Ignite CLI` with its sub commands.
Expand Down
4 changes: 1 addition & 3 deletions ignite/cmd/generate_dart.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,9 @@ func NewGenerateDart() *cobra.Command {
}

func generateDartHandler(cmd *cobra.Command, args []string) error {
session := cliui.New(cliui.StartSpinner())
session := cliui.New(cliui.StartSpinnerWithText(statusGenerating))
defer session.End()

session.StartSpinner("Generating...")

c, err := newChainWithHomeFlags(
cmd,
chain.EnableThirdPartyModuleCodegen(),
Expand Down
4 changes: 1 addition & 3 deletions ignite/cmd/generate_go.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,9 @@ func NewGenerateGo() *cobra.Command {
}

func generateGoHandler(cmd *cobra.Command, args []string) error {
session := cliui.New(cliui.StartSpinner())
session := cliui.New(cliui.StartSpinnerWithText(statusGenerating))
defer session.End()

session.StartSpinner("Generating...")

c, err := newChainWithHomeFlags(
cmd,
chain.WithOutputer(session),
Expand Down
4 changes: 1 addition & 3 deletions ignite/cmd/generate_openapi.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,9 @@ func NewGenerateOpenAPI() *cobra.Command {
}

func generateOpenAPIHandler(cmd *cobra.Command, args []string) error {
session := cliui.New(cliui.StartSpinner())
session := cliui.New(cliui.StartSpinnerWithText(statusGenerating))
defer session.End()

session.StartSpinner("Generating...")

c, err := newChainWithHomeFlags(
cmd,
chain.WithOutputer(session),
Expand Down
4 changes: 1 addition & 3 deletions ignite/cmd/generate_typescript_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,9 @@ func NewGenerateTSClient() *cobra.Command {
}

func generateTSClientHandler(cmd *cobra.Command, args []string) error {
session := cliui.New(cliui.StartSpinner())
session := cliui.New(cliui.StartSpinnerWithText(statusGenerating))
defer session.End()

session.StartSpinner("Generating...")

c, err := newChainWithHomeFlags(
cmd,
chain.EnableThirdPartyModuleCodegen(),
Expand Down
4 changes: 1 addition & 3 deletions ignite/cmd/generate_vuex.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,9 @@ func NewGenerateVuex() *cobra.Command {
}

func generateVuexHandler(cmd *cobra.Command, args []string) error {
session := cliui.New(cliui.StartSpinner())
session := cliui.New(cliui.StartSpinnerWithText(statusGenerating))
defer session.End()

session.StartSpinner("Generating...")

c, err := newChainWithHomeFlags(
cmd,
chain.EnableThirdPartyModuleCodegen(),
Expand Down
4 changes: 1 addition & 3 deletions ignite/cmd/network_reward_release.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,9 @@ func networkRewardRelease(cmd *cobra.Command, args []string) (err error) {
err = handleRelayerAccountErr(err)
}()

session := cliui.New(cliui.StartSpinner())
session := cliui.New(cliui.StartSpinnerWithText("Setting up chains..."))
defer session.End()

session.StartSpinner("Setting up chains...")

launchID, err := network.ParseID(args[0])
if err != nil {
return err
Expand Down
3 changes: 1 addition & 2 deletions ignite/cmd/node_query_bank_balances.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,8 @@ func nodeQueryBankBalancesHandler(cmd *cobra.Command, args []string) error {
return err
}

session := cliui.New(cliui.StartSpinner())
session := cliui.New(cliui.StartSpinnerWithText(statusQuerying))
defer session.End()
session.StartSpinner("Querying...")

balances, err := client.BankBalances(cmd.Context(), address, pagination)
if err != nil {
Expand Down
4 changes: 1 addition & 3 deletions ignite/cmd/node_query_tx.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,9 @@ func NewNodeQueryTx() *cobra.Command {
}

func nodeQueryTxHandler(cmd *cobra.Command, args []string) error {
session := cliui.New(cliui.StartSpinner())
session := cliui.New(cliui.StartSpinnerWithText(statusQuerying))
defer session.End()

session.StartSpinner("Querying...")

bz, err := hex.DecodeString(args[0])
if err != nil {
return err
Expand Down
2 changes: 1 addition & 1 deletion ignite/cmd/node_tx_bank_send.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ func nodeTxBankSendHandler(cmd *cobra.Command, args []string) error {
return err
}

session := cliui.New(cliui.StartSpinner())
session := cliui.New()
defer session.End()

if generateOnly {
Expand Down
2 changes: 1 addition & 1 deletion ignite/cmd/relayer_configure.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ func relayerConfigureHandler(cmd *cobra.Command, _ []string) (err error) {
err = handleRelayerAccountErr(err)
}()

session := cliui.New(cliui.StartSpinner())
session := cliui.New()
defer session.End()

ca, err := cosmosaccount.New(
Expand Down
2 changes: 1 addition & 1 deletion ignite/cmd/relayer_connect.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func relayerConnectHandler(cmd *cobra.Command, args []string) (err error) {
err = handleRelayerAccountErr(err)
}()

session := cliui.New(cliui.StartSpinner())
session := cliui.New()
defer session.End()

ca, err := cosmosaccount.New(
Expand Down
6 changes: 3 additions & 3 deletions ignite/cmd/scaffold.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ const (
flagNoSimulation = "no-simulation"
flagResponse = "response"
flagDescription = "desc"

statusScaffolding = "Scaffolding..."
)

// NewScaffold returns a command that groups scaffolding related sub commands.
Expand Down Expand Up @@ -135,11 +137,9 @@ func scaffoldType(
}
}

session := cliui.New(cliui.StartSpinner())
session := cliui.New(cliui.StartSpinnerWithText(statusScaffolding))
defer session.End()

session.StartSpinner("Scaffolding...")

sc, err := newApp(appPath)
if err != nil {
return err
Expand Down
4 changes: 1 addition & 3 deletions ignite/cmd/scaffold_band.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,9 @@ func createBandchainHandler(cmd *cobra.Command, args []string) error {
signer = flagGetSigner(cmd)
)

session := cliui.New(cliui.StartSpinner())
session := cliui.New(cliui.StartSpinnerWithText(statusScaffolding))
defer session.End()

session.StartSpinner("Scaffolding...")

module, err := cmd.Flags().GetString(flagModule)
if err != nil {
return err
Expand Down
4 changes: 1 addition & 3 deletions ignite/cmd/scaffold_chain.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,9 @@ about Cosmos SDK on https://docs.cosmos.network
}

func scaffoldChainHandler(cmd *cobra.Command, args []string) error {
session := cliui.New(cliui.StartSpinner())
session := cliui.New(cliui.StartSpinnerWithText(statusScaffolding))
defer session.End()

session.StartSpinner("Scaffolding...")

var (
name = args[0]
addressPrefix = getAddressPrefix(cmd)
Expand Down
4 changes: 1 addition & 3 deletions ignite/cmd/scaffold_message.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,9 @@ func messageHandler(cmd *cobra.Command, args []string) error {
withoutSimulation = flagGetNoSimulation(cmd)
)

session := cliui.New(cliui.StartSpinner())
session := cliui.New(cliui.StartSpinnerWithText(statusScaffolding))
defer session.End()

session.StartSpinner("Scaffolding...")

cacheStorage, err := newCache(cmd)
if err != nil {
return err
Expand Down
4 changes: 1 addition & 3 deletions ignite/cmd/scaffold_module.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,11 +119,9 @@ func scaffoldModuleHandler(cmd *cobra.Command, args []string) error {
appPath = flagGetPath(cmd)
)

session := cliui.New(cliui.StartSpinner())
session := cliui.New(cliui.StartSpinnerWithText(statusScaffolding))
defer session.End()

session.StartSpinner("Scaffolding...")

ibcModule, err := cmd.Flags().GetBool(flagIBC)
if err != nil {
return err
Expand Down
4 changes: 1 addition & 3 deletions ignite/cmd/scaffold_mwasm.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,9 @@ func NewScaffoldWasm() *cobra.Command {
func scaffoldWasmHandler(cmd *cobra.Command, args []string) error {
appPath := flagGetPath(cmd)

session := cliui.New(cliui.StartSpinner())
session := cliui.New(cliui.StartSpinnerWithText(statusScaffolding))
defer session.End()

session.StartSpinner("Scaffolding...")

cacheStorage, err := newCache(cmd)
if err != nil {
return err
Expand Down
4 changes: 1 addition & 3 deletions ignite/cmd/scaffold_package.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,9 @@ func createPacketHandler(cmd *cobra.Command, args []string) error {
appPath = flagGetPath(cmd)
)

session := cliui.New(cliui.StartSpinner())
session := cliui.New(cliui.StartSpinnerWithText(statusScaffolding))
defer session.End()

session.StartSpinner("Scaffolding...")

module, err := cmd.Flags().GetString(flagModule)
if err != nil {
return err
Expand Down
4 changes: 1 addition & 3 deletions ignite/cmd/scaffold_query.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,9 @@ func NewScaffoldQuery() *cobra.Command {
func queryHandler(cmd *cobra.Command, args []string) error {
appPath := flagGetPath(cmd)

session := cliui.New(cliui.StartSpinner())
session := cliui.New(cliui.StartSpinnerWithText(statusScaffolding))
defer session.End()

session.StartSpinner("Scaffolding...")

// Get the module to add the type into
module, err := cmd.Flags().GetString(flagModule)
if err != nil {
Expand Down
4 changes: 1 addition & 3 deletions ignite/cmd/scaffold_vue.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,9 @@ func NewScaffoldVue() *cobra.Command {
}

func scaffoldVueHandler(cmd *cobra.Command, args []string) error {
session := cliui.New(cliui.StartSpinner())
session := cliui.New(cliui.StartSpinnerWithText(statusScaffolding))
defer session.End()

session.StartSpinner("Scaffolding...")

path := flagGetPath(cmd)
if err := scaffolder.Vue(path); err != nil {
return err
Expand Down
17 changes: 15 additions & 2 deletions ignite/pkg/cliui/clispinner/clispinner.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,26 +25,39 @@ type (

Options struct {
writer io.Writer
text string
}
)

// WithWriter configures an output for a spinner
// WithWriter configures an output for a spinner.
func WithWriter(w io.Writer) Option {
return func(options *Options) {
options.writer = w
}
}

// WithText configures the spinner text.
func WithText(text string) Option {
return func(options *Options) {
options.text = text
}
}

// New creates a new spinner.
func New(options ...Option) *Spinner {
o := Options{}
for _, apply := range options {
apply(&o)
}

text := o.text
if text == "" {
text = DefaultText
}

spOptions := []spinner.Option{
spinner.WithColor(spinnerColor),
spinner.WithSuffix(" " + DefaultText),
spinner.WithSuffix(" " + text),
}

if o.writer != nil {
Expand Down
26 changes: 22 additions & 4 deletions ignite/pkg/cliui/cliui.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@ type sessionOptions struct {
stdout io.WriteCloser
stderr io.WriteCloser

startSpinner bool
verbosity uilog.Verbosity
spinnerStart bool
spinnerText string

verbosity uilog.Verbosity
}

// Session controls command line interaction with users.
Expand Down Expand Up @@ -67,7 +69,16 @@ func WithVerbosity(v uilog.Verbosity) Option {
// StartSpinner forces spinner to be spinning right after creation.
func StartSpinner() Option {
return func(s *Session) {
s.options.startSpinner = true
s.options.spinnerStart = true
}
}

// StartSpinnerWithText forces spinner to be spinning right after creation
// with a custom status text.
func StartSpinnerWithText(text string) Option {
return func(s *Session) {
s.options.spinnerStart = true
s.options.spinnerText = text
}
}

Expand Down Expand Up @@ -98,8 +109,12 @@ func New(options ...Option) *Session {

session.out = uilog.NewOutput(logOptions...)

if session.options.startSpinner {
if session.options.spinnerStart {
session.spinner = clispinner.New(clispinner.WithWriter(session.out.Stdout()))

if session.options.spinnerText != "" {
session.spinner.SetText(session.options.spinnerText)
}
}

// The main loop that prints the events uses a wait group to block
Expand Down Expand Up @@ -233,10 +248,13 @@ func (s *Session) handleEvents() {
switch e.ProgressIndication {
case events.IndicationStart:
s.StartSpinner(e.String())
case events.IndicationUpdate:
s.spinner.SetText(e.String())
case events.IndicationFinish:
s.StopSpinner()
fmt.Fprintf(stdout, "%s\n", e)
default:
// The text printed here won't be removed when the spinner stops
resume := s.PauseSpinner()
fmt.Fprintf(stdout, "%s\n", e)
resume()
Expand Down
Loading

0 comments on commit d942df8

Please sign in to comment.