مشكلة وسيط CustomComponent للإجراء الصغير

أحاول استبدال وصف إجراء صغير للمنشور اختياريًا بمكون مخصص (CustomComponent).

ومع ذلك، لم يتم تمرير المنشور بشكل صحيح إلى محول القيمة (value transformer).

الكود الأساسي

  @cached
  get CustomComponent() {
    return applyValueTransformer("post-small-action-custom-component", null, {
      actionCode: this.code,
      post: this.post,
    });
  }

كود التصحيح الخاص بي:

  api.registerValueTransformer(
    "post-small-action-custom-component",
    (arg) => {
      console.log(arg);
    }
  );

الإخراج:

context: Object { actionCode: "bid", post: undefined }
​​
الاختبار لا يتحقق من المعلمات، لذلك يمر هذا دون أن يلاحظه أحد.

أعتقد أن معلمة post يجب أن تكون this.args.post وليس this.post.

لقد كنت أحاول حلًا بديلاً عن طريق إضافة المكون بشكل غير مشروط وجعله يتحقق بنفسه مما يجب فعله، ولكن للأسف يبدو أن الوسائط لا يتم تمريرها بشكل صحيح أيضًا، لذا يفشل كل من الحل البديل والتنفيذ العادي هنا أيضًا:

              <this.CustomComponent
                @code={{this.code}}
                @post={{this.post}}
                @createdAt={{this.createdAt}}
                @path={{this.path}}
                @username={{this.username}}
              />

هناك getters في PostSmallAction لـ code و createdAt و path، ولكن (مرة أخرى) this.post غير موجود ويبدو أن username() به خطأ أيضًا (لا يوجد action_code_who في this.args.post؟)، لذا تظل هذه السمات فارغة.

لا يمكنني العثور على تطبيق “حقيقي” موجود. هل أنا حقًا أول شخص يستخدم هذا؟ :thinking:

إعجابَين (2)

لقد قدمت طلب سحب (PR) يقوم بإصلاح هذه المشكلة FIX: correct argument passing for small action post value transformer and custom component by communiteq · Pull Request #34915 · discourse/discourse · GitHub

@david @saquetim هل يمكنكم إلقاء نظرة من فضلكم :pleading_face:

إعجابَين (2)

شكراً لملاحظتك هذه المشكلة.

أنت على حق؛ يجب أن تكون المعلمة post هي this.args.post بدلاً من this.post.

username مضللة قليلاً هنا. action_code_who صحيحة بالفعل ولكنها تُستخدم بواسطة بعض الإضافات مثل إضافة assign، لذلك فهي ليست موجودة دائماً في الكائن post. للحصول على المستخدم الذي أنشأ الإجراء الصغير، يمكنك استخدام @post.username

لم أكن متأكداً مما إذا كان بإمكاني دفع تغييرات إلى طلب السحب الخاص بك، لذلك فتحت الطلب أدناه لمعالجة هذه المشكلات:

  • إصلاح المعلمة post التي تم تمريرها إلى المحول والمكون المخصص
  • إعادة تسمية المعلمة username إلى who لتقليل الارتباك حول هذه المعلمة
  • إضافة اختبارات للتحقق من تمرير المعلمات بشكل صحيح

أعتقد أنك كذلك. :smiley:

على حد علمي، لم يتم استخدام واجهة برمجة التطبيقات القديمة في أي من التخصيصات التي نتتبعها في مستودعات all-the-*. لقد أضفت هذا فقط لتوفير بديل في حال كان أحد المستضيفين الذاتيين يستخدمه.

:rocket: رائع!

حسنًا، شكرًا لكونك استباقيًا :slight_smile:
أعتقد أن discourse-encrypt كان يستخدمه، وثلاثة (!) إضافات خاصة نقوم بصيانتها.

شكرًا على الشرح، لم أفهم كيف كان هذا يعمل، والآن فهمت.

آخر طلب: هل يمكن نقل هذا الإصلاح الخاص بك إلى الإصدار المستقر أيضًا؟

تم نقل الإصلاح إلى الإصدار المستقر.

إعجاب واحد (1)

تم إغلاق هذا الموضوع تلقائيًا بعد 24 ساعة من آخر رد. لم يعد يُسمح بالردود الجديدة.