-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
2375cbf
commit 4c20fa7
Showing
13 changed files
with
281 additions
and
40 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,19 +1,11 @@ | ||
import 'package:commander_ui/commander_ui.dart'; | ||
import 'package:commander_ui/src/application/themes/default_ask_theme.dart'; | ||
|
||
Future<void> main() async { | ||
final theme = DefaultAskTheme.copyWith(askPrefix: '🤖'); | ||
|
||
final commander = Commander(level: Level.verbose); | ||
|
||
final value = await commander.ask('What is your name ?', | ||
// defaultValue: 'John Doe', | ||
validate: (value) { | ||
return switch (value) { | ||
String(:final isEmpty) when isEmpty => 'Name cannot be empty', | ||
_ => null, | ||
}; | ||
}); | ||
validate: (validator) => | ||
validator..notEmpty(message: 'Name cannot be empty :)')); | ||
|
||
print(value); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,26 @@ | ||
export 'package:commander_ui/src/commander.dart'; | ||
export 'package:commander_ui/src/level.dart'; | ||
export 'package:commander_ui/src/application/utils/terminal_tools.dart'; | ||
export 'package:commander_ui/src/domains/models/commander_theme.dart'; | ||
export 'package:commander_ui/src/domains/models/component.dart'; | ||
|
||
export 'package:commander_ui/src/application/components/select.dart'; | ||
export 'package:commander_ui/src/application/components/ask.dart'; | ||
export 'package:commander_ui/src/application/components/checkbox.dart'; | ||
export 'package:commander_ui/src/application/components/screen.dart'; | ||
export 'package:commander_ui/src/application/components/select.dart'; | ||
export 'package:commander_ui/src/application/components/swap.dart'; | ||
export 'package:commander_ui/src/application/components/table.dart'; | ||
export 'package:commander_ui/src/application/components/task.dart'; | ||
|
||
export 'package:commander_ui/src/application/themes/default_ask_theme.dart'; | ||
export 'package:commander_ui/src/application/themes/default_checkbox_theme.dart'; | ||
export 'package:commander_ui/src/application/themes/default_select_theme.dart'; | ||
export 'package:commander_ui/src/application/themes/default_swap_theme.dart'; | ||
export 'package:commander_ui/src/application/themes/default_task_theme.dart'; | ||
export 'package:commander_ui/src/application/utils/terminal_tools.dart'; | ||
export 'package:commander_ui/src/application/validators/chain_validator.dart'; | ||
export 'package:commander_ui/src/commander.dart'; | ||
export 'package:commander_ui/src/domains/models/chain_validator.dart'; | ||
export 'package:commander_ui/src/domains/models/commander_theme.dart'; | ||
export 'package:commander_ui/src/domains/models/component.dart'; | ||
export 'package:commander_ui/src/domains/models/component_theme.dart'; | ||
export 'package:commander_ui/src/domains/themes/ask_theme.dart'; | ||
export 'package:commander_ui/src/domains/themes/checkbox_theme.dart'; | ||
export 'package:commander_ui/src/domains/themes/select_theme.dart'; | ||
export 'package:commander_ui/src/domains/themes/swap_theme.dart'; | ||
export 'package:commander_ui/src/domains/themes/task_theme.dart'; | ||
export 'package:commander_ui/src/level.dart'; | ||
export 'package:mansion/mansion.dart'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,150 @@ | ||
import 'package:commander_ui/src/domains/models/chain_validator.dart'; | ||
|
||
final class ValidatorChain | ||
implements ChainValidatorExecutor, ChainValidatorContract { | ||
final List<String? Function(String?)> _validators = []; | ||
|
||
String? value; | ||
|
||
@override | ||
void validate(String? Function(String? value) validator) { | ||
_validators.add(validator); | ||
} | ||
|
||
@override | ||
void notEmpty({String? message = 'This field is required'}) { | ||
_validators.add((value) { | ||
return switch (value) { | ||
String(:final isEmpty) when isEmpty => message, | ||
_ => null, | ||
}; | ||
}); | ||
} | ||
|
||
@override | ||
void empty({String? message = 'This field should be empty'}) { | ||
_validators.add((value) { | ||
return switch (value) { | ||
null => null, | ||
_ => message, | ||
}; | ||
}); | ||
} | ||
|
||
@override | ||
void email({String? message = 'This field should be a valid email'}) { | ||
_validators.add((value) { | ||
final emailRegExp = RegExp(r'^[\w-.]+@([\w-]+\.)+[\w-]{2,4}$'); | ||
|
||
if (value == null) { | ||
return message; | ||
} | ||
|
||
return switch (emailRegExp.hasMatch(value)) { | ||
false => message, | ||
_ => null, | ||
}; | ||
}); | ||
} | ||
|
||
@override | ||
void minLength(int count, {String? message}) { | ||
_validators.add((value) { | ||
if (value case String value when value.length < count) { | ||
return message ?? 'This field should have at least $count characters'; | ||
} | ||
|
||
return null; | ||
}); | ||
} | ||
|
||
@override | ||
void maxLength(int count, {String? message}) { | ||
_validators.add((value) { | ||
if (value case String value when value.length > count) { | ||
return message ?? 'This field should have at most $count characters'; | ||
} | ||
|
||
return null; | ||
}); | ||
} | ||
|
||
@override | ||
void equals(String str, {String? message}) { | ||
_validators.add((value) { | ||
if (value case String value when value != str) { | ||
return message ?? 'This field should be equal to $str'; | ||
} | ||
|
||
return null; | ||
}); | ||
} | ||
|
||
@override | ||
void between(int min, int max, {String? message}) { | ||
final errorMessage = | ||
message ?? 'This field should be between $min and $max characters'; | ||
_validators.add((value) { | ||
if (value == null) { | ||
return errorMessage; | ||
} | ||
|
||
final length = value.length; | ||
|
||
if (length < min || length > max) { | ||
return errorMessage; | ||
} | ||
|
||
return null; | ||
}); | ||
} | ||
|
||
@override | ||
void lowerThan(int value, {String? message}) { | ||
final errorMessage = message ?? 'This field should be lower than $value'; | ||
_validators.add((response) { | ||
if (response == null) { | ||
return errorMessage; | ||
} | ||
|
||
final intValue = int.tryParse(response); | ||
|
||
if (intValue == null || intValue >= value) { | ||
return errorMessage; | ||
} | ||
|
||
return null; | ||
}); | ||
} | ||
|
||
@override | ||
void greaterThan(int value, {String? message}) { | ||
final errorMessage = message ?? 'This field should be greater than $value'; | ||
_validators.add((response) { | ||
if (response == null) { | ||
return errorMessage; | ||
} | ||
|
||
final intValue = int.tryParse(response); | ||
|
||
if (intValue == null || intValue <= value) { | ||
return errorMessage; | ||
} | ||
|
||
return null; | ||
}); | ||
} | ||
|
||
@override | ||
String? execute(String? value) { | ||
print('Executing validators'); | ||
for (final validator in _validators) { | ||
final result = validator(value); | ||
if (result != null) { | ||
return result; | ||
} | ||
} | ||
|
||
return null; | ||
} | ||
} |
Oops, something went wrong.