YTToast.ets 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import { BusinessError } from '@kit.BasicServicesKit';
  2. import { ComponentContent, promptAction } from '@kit.ArkUI';
  3. import { UIContext } from '@ohos.arkui.UIContext';
  4. import { BasicType, YTLog } from '../../../../Index';
  5. import { yTDoubleConfirm } from '../components/generalComp/YtDoubleConfirm';
  6. import { agreePrivacy } from '../components/generalComp/AgreePrivacy';
  7. import { LoginCollect } from '../models/LoginCollect';
  8. interface InitOption {
  9. context: UIContext;
  10. options: promptAction.BaseDialogOptions;
  11. }
  12. export class Params<T> implements BasicType<T> {
  13. src?: ResourceStr
  14. acSrc?: ResourceStr
  15. text?: string
  16. index?: number
  17. number?: number | undefined
  18. message?: string
  19. loginType?: LoginCollect
  20. click?: () => void
  21. constructor(item: BasicType = {}) {
  22. this.src = item.src;
  23. this.text = item.text;
  24. this.index = item.index;
  25. this.number = item.number;
  26. this.click = item.click;
  27. this.message = item.message;
  28. this.acSrc = item.acSrc;
  29. this.loginType = item.loginType;
  30. }
  31. }
  32. export class YTToast {
  33. private static declare instance: YTToast
  34. private declare ctx: UIContext;
  35. private declare contentNode: ComponentContent<Object> | null;
  36. private declare options: promptAction.BaseDialogOptions;
  37. private maskColor: string = '#80000000'
  38. static getInstance() {
  39. if (!YTToast.instance) {
  40. YTToast.instance = new YTToast()
  41. }
  42. return YTToast.instance
  43. }
  44. init(initOption: InitOption) {
  45. this.ctx = initOption.context;
  46. initOption.options.maskColor = this.maskColor
  47. this.options = initOption.options;
  48. }
  49. setContext(context: UIContext) {
  50. this.ctx = context;
  51. }
  52. setContentNode(node: ComponentContent<Object>) {
  53. this.contentNode = node;
  54. }
  55. setOptions(options: promptAction.BaseDialogOptions) {
  56. this.options = options;
  57. }
  58. openToast(builder: WrappedBuilder<[
  59. BasicType
  60. ]>, item: BasicType) {
  61. this.contentNode =
  62. new ComponentContent(this.ctx, builder, new Params<undefined>(item));
  63. this.ctx.getPromptAction()
  64. .openCustomDialog(this.contentNode, this.options)
  65. .then(() => {
  66. console.info('OpenCustomDialog complete.')
  67. })
  68. .catch((error: BusinessError) => {
  69. let message = (error as BusinessError).message;
  70. let code = (error as BusinessError).code;
  71. console.error(`OpenCustomDialog args error code is ${code}, message is ${message}`);
  72. })
  73. }
  74. doubleConfirm(item: BasicType) {
  75. this.openToast(wrapBuilder(yTDoubleConfirm), item)
  76. }
  77. agreePrivacy(item: BasicType) {
  78. this.openToast(wrapBuilder(agreePrivacy), item)
  79. }
  80. hide() {
  81. try {
  82. if (this.contentNode !== null) {
  83. this.ctx.getPromptAction()
  84. .closeCustomDialog(this.contentNode)
  85. .then(() => {
  86. this.contentNode = null
  87. console.info('CloseCustomDialog complete.')
  88. })
  89. .catch((error: BusinessError) => {
  90. let message = (error as BusinessError).message;
  91. let code = (error as BusinessError).code;
  92. console.error(`CloseCustomDialog args error code is ${code}, message is ${message}`);
  93. })
  94. }
  95. } catch (e) {
  96. YTLog.warn(e)
  97. }
  98. }
  99. updateDialog(options: promptAction.BaseDialogOptions) {
  100. if (this.contentNode !== null) {
  101. this.ctx.getPromptAction()
  102. .updateCustomDialog(this.contentNode, options)
  103. .then(() => {
  104. console.info('UpdateCustomDialog complete.')
  105. })
  106. .catch((error: BusinessError) => {
  107. let message = (error as BusinessError).message;
  108. let code = (error as BusinessError).code;
  109. console.error(`UpdateCustomDialog args error code is ${code}, message is ${message}`);
  110. })
  111. }
  112. }
  113. confirmDeleteFolder(sure: () => void) {
  114. yTToast.doubleConfirm({
  115. message: '删除该分类将会同时删除分类下所\n有信息', click: sure
  116. })
  117. }
  118. }
  119. export const yTToast = YTToast.getInstance()