react-native-navigation的迁移库

Commands.js 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. const _ = require('lodash');
  2. const OptionsProcessor = require('./OptionsProcessor');
  3. class Commands {
  4. constructor(nativeCommandsSender, layoutTreeParser, layoutTreeCrawler) {
  5. this.nativeCommandsSender = nativeCommandsSender;
  6. this.layoutTreeParser = layoutTreeParser;
  7. this.layoutTreeCrawler = layoutTreeCrawler;
  8. }
  9. setRoot(simpleApi) {
  10. const input = _.cloneDeep(simpleApi);
  11. const layout = this.layoutTreeParser.parseFromSimpleJSON(input);
  12. this.layoutTreeCrawler.crawl(layout);
  13. return this.nativeCommandsSender.setRoot(layout);
  14. }
  15. setOptions(containerId, options) {
  16. const input = _.cloneDeep(options);
  17. OptionsProcessor.processOptions(input);
  18. this.nativeCommandsSender.setOptions(containerId, input);
  19. }
  20. showModal(simpleApi) {
  21. const input = _.cloneDeep(simpleApi);
  22. const layout = this.layoutTreeParser.parseFromSimpleJSON(input);
  23. this.layoutTreeCrawler.crawl(layout);
  24. return this.nativeCommandsSender.showModal(layout);
  25. }
  26. dismissModal(id) {
  27. return this.nativeCommandsSender.dismissModal(id);
  28. }
  29. dismissAllModals() {
  30. return this.nativeCommandsSender.dismissAllModals();
  31. }
  32. push(onContainerId, containerData) {
  33. const input = _.cloneDeep(containerData);
  34. const layout = this.layoutTreeParser.createContainer(input);
  35. this.layoutTreeCrawler.crawl(layout);
  36. return this.nativeCommandsSender.push(onContainerId, layout);
  37. }
  38. pop(containerId) {
  39. return this.nativeCommandsSender.pop(containerId);
  40. }
  41. popTo(containerId) {
  42. return this.nativeCommandsSender.popTo(containerId);
  43. }
  44. popToRoot(containerId) {
  45. return this.nativeCommandsSender.popToRoot(containerId);
  46. }
  47. showOverlay(type, options) {
  48. let promise;
  49. if (type === 'custom') {
  50. const layout = this.layoutTreeParser.createDialogContainer({ name: options });
  51. this.layoutTreeCrawler.crawl(layout);
  52. promise = this.nativeCommandsSender.showOverlay(type, layout);
  53. } else {
  54. const input = _.cloneDeep(options);
  55. OptionsProcessor.processOptions(input);
  56. promise = this.nativeCommandsSender.showOverlay(type, input);
  57. }
  58. return promise;
  59. }
  60. dismissOverlay() {
  61. return this.nativeCommandsSender.dismissOverlay();
  62. }
  63. }
  64. module.exports = Commands;