مرحباً بالجميع،
كنت أبحث في سبب فقدان منشورات الرسائل الخاصة (PM) الأولى التي تحتوي على تحذير من تنسيق الألوان الخاص بالموظفين بعد هجرة تيار المنشورات إلى Glimmer، وأردت مشاركة ما وجدته — يبدو أن الأمر مجرد إغفال بسيط وليس تغييراً مقصوداً (على الأقل من جانب الكود).
المشكلة
في post.gjs (السطر 436)، يتم تطبيق فئة CSS الخاصة بالمشرف بناءً على:
(if
(or @post.isModeratorAction (and @post.isWarning @post.firstPost))
"post--moderator moderator"
"post--regular regular"
)
يعمل @post.isModeratorAction بشكل صحيح — إنه getter صحيح في نموذج Post. لكن @post.isWarning غير موجود أصلاً في نموذج Post.
لا توجد خاصية أو getter أو حقل مُتتبع (tracked field) باسم isWarning مُعرَّف هناك. لذا فإن الشرط (and @post.isWarning @post.firstPost) يُقيّم دائماً إلى false، وبالتالي لا يتم تطبيق فئة moderator على منشورات الرسائل الخاصة الأولى التي تحتوي على تحذير.
كيف كان يعمل سابقاً
في نظام الويدجت (widget) القديم، كان transformPost (transform-post.js) يقوم بشكل صريح بتعيين العلم على مستوى الموضوع إلى سمات المنشور:
postAtts.isWarning = topic.is_warning;
ثم كان widgets/post.js يتحقق من attrs.isWarning && attrs.firstPost لتطبيق فئة moderator. لقد ضُاع هذا الجسر أثناء الهجرة إلى Glimmer.
رأيي في الأمر
بما أن post.gjs يشير بشكل نشط إلى @post.isWarning، يبدو أن القصد كان الحفاظ على هذا السلوك. إذا كان إزالة لون الموظفين من التحذيرات أمراً مقصوداً، فإن الفرع (and @post.isWarning @post.firstPost) في post.gjs هو كود ميت ويمكن تنظيفه. وإذا كان خطأً (وهو ما يبدو أكثر احتمالاً نظراً لكود الويدجت القديم)، فسيكون الإصلاح عبارة عن getter صغير في نموذج Post:
get isWarning() {
return this.topic?.is_warning;
}
أردت التحقق من رأي الفريق — هل يبدو هذا إغفالاً ناتجاً عن الهجرة إلى Glimmer، أم تم تركه عمداً؟ في كلتا الحالتين، قد يكون من الجيد معالجة المرجع الميت إلى @post.isWarning في post.gjs.
شكراً!