2016-12-09 10 views
6

PROMPTGraphQL और रिले छनन यूआई

आप रिले उपयोग करके Google कैलेंडर का निर्माण करना हो तो, आप कैसे GraphQL स्कीमा और रिले कंटेनर/घटकों की संरचना ठीक से & एकाधिक कैलेंडर छुपा दिखा संभालने के लिए चाहते हैं?

प्रयास

एक इस तरह एक स्कीमा सोच सकता है:

viewer { 
    user { 
    calendars(calendarIds: [String]) { 
     edges, 
     node { 
      name, 
      id, 
      events(dates: [Date]) { 
      ... edges, node, eventinfo... 
      } 
     } 
     } 
    } 
    } 
} 

तो, मैं सभी कैलेंडर और सभी घटनाओं, या एक विशेष कैलेंडर नीचे खींच सकते हैं, या क्या आपके पास ।

स्ट्रक्चरिंग रिले कंटेनरों और घटकों, मैं निम्नलिखित कल्पना कर सकते हैं:

<CalendarView Container> 
    <CalendarView> 
    <WeekView> or <MonthView> or <Agenda> etc... 
     <Event> 

इस तरह CalendarView रिले कंटेनर टुकड़ा कैलेंडर का अनुरोध सेट करता है और CalenderView घटक setVariables का उपयोग करता दिखाई दे रहा/छिपने टॉगल करने के लिए कि दृश्य में उस कैलेंडर का। कि, वे सभी चयनित घटनाओं से डेटा की आवश्यकता होती है -

समस्या यह है कि मैं का सामना कर रहा हूँ (और कहा कि मेरे सिर स्पिन बना रहा है) कि Day/Week/Month/Agenda घटकों मिश्रित विचारों हो रहा है।

भूखंड

गाढ़ा अब, यह ठीक लग रहा है -, सही CalendarView calendarId चर सेट है और जिसके परिणामस्वरूप घटनाओं नीचे से गुजरती हैं? एक प्रकार का। अब CalendarView के लिए टुकड़ा calendarIds के सेट के साथ बनाया गया है, जैसे कि calendar पर टॉगल करना या बंद करने के लिए पूरे पेड़ को बदलना है।

गोचा?

जहां तक ​​मैं कह सकता हूं, रिले calendarIds के प्रत्येक संयोजन को पूरी तरह से अलग लाने के रूप में देखता है। इसलिए, जब मैं एक नए id पर टॉगल करता हूं तो यह सभी ईवेंट प्राप्त करता है, यहां तक ​​कि उन कैलेंडर के लिए भी जिन्हें मैंने पहले ही लाया है।

रखें कोड वार:

fragment calendar(calendarIds: [1, 2]) { ... } 

एक है पूरी तरह अलग लाने से:

fragment calendar(calendarIds: [1, 2, 3]) { ... } 

यह वह जगह है ... बुरा। उन कैलेंडर पर बहुत सी घटनाएं हो सकती हैं और ओवर-फ़ेचिंग एक हत्यारा है।

सिद्धांत रूप में, मैं प्रति कैलेंडर एक कंटेनर बना सकता हूं, लेकिन फिर मैं उन कैलेंडर पर घटनाओं को कैसे जोड़ूं और उन्हें एक सामान्य उप-घटक में पाइप कर दूंगा? कैलेंडर को स्तरित नहीं किया जा सकता है क्योंकि घटनाओं को अन्य घटनाओं के प्रति प्रतिक्रिया में घूमने की आवश्यकता होती है, यहां तक ​​कि अलग-अलग कैलेंडर पर भी (उन्हें बाएं/दाएं स्थानांतरित करने के लिए स्थानांतरित करना)।

विचार? मेरा दिमाग दर्द होता है।

उत्तर

3

रखें कोड के लिहाज से, calendar(calendarIds: [1, 2])calendar(calendarIds: [1, 2, 3])

हाँ से एक बिल्कुल अलग प्रश्न है। ग्राफ़क्यूएल क्षेत्र तर्कों के लिए अर्थशास्त्र को असाइन नहीं करता है, इसलिए रिले (न ही कोई अन्य ग्राफक्ल्यू क्लाइंट) यह नहीं जानता कि calendarIds तर्क परिणामों के आईडी से मेल खाते हैं। हालांकि, यह एक सामान्य उपयोग-मामला है, हालांकि, रिले एक विशेष nodes(ids: [ID!]) रूट फ़ील्ड (क्वेरी प्रकार पर) का समर्थन करता है जिसे आप उम्मीद कर रहे थे। इसका उपयोग करने के लिए, अपनी स्कीमा में nodes फ़ील्ड को कार्यान्वित करें जो परिणाम को एक सरणी के रूप में लौटाता है जिसका ऑर्डर इनपुट आईडी के साथ मेल खाता है, जो किसी भी परिणाम के लिए शून्य प्रविष्टियों के साथ लोड नहीं किया जा सकता है। जैसे यदि इनपुट आईडी [1,2,3] हैं, तो आप [result1, result2, result3] वापस कर देंगे। इस फ़ील्ड का उपयोग करते समय, रिले पहले प्राप्त डेटा के खिलाफ तर्क तर्कों को अलग करेगा (क्योंकि यह धारणा है कि इस विशेष क्षेत्र के तर्कों का अर्थ अर्थात् अर्थात् अर्थपूर्ण अर्थ है)।

+0

वहां 'नोड्स' रूट फ़ील्ड पर कहीं भी दस्तावेज़ीकरण है? हम 'ग्राफ़क्ल-रिले' के माध्यम से रूट नोड फ़ील्ड को लागू करते हैं लेकिन मुझे 'नोड्स' पर कुछ भी नहीं मिल रहा है। –

+0

इसके अलावा, उपरोक्त दृष्टिकोण के समान "बहुवचन पहचान रूट फ़ील्ड" है? ऐसा लगता है कि 'नोड्स' फ़ील्ड का उपयोग करके "बहुवचन पहचानने वाले रूट फ़ील्ड" की तरह, वस्तुओं को एक-से-एक मैपिंग के साथ आईडी की आवश्यकता होगी। आदर्श रूप से, मैं ऑब्जेक्ट (इवेंट) के बड़े सेट के खिलाफ वेरिएबल्स का उपयोग करके क्वेरी करने में सक्षम हूं जो इनपुट आईडी (इनपुट: [3 ids का ऐरे], आउटपुट द्वारा अच्छी तरह से समूहीकृत नहीं होते हैं: [एन घटनाओं का ऐरे]), लेकिन दोनों दृष्टिकोण कुछ मध्यस्थ वस्तु (इनपुट: [3 ids के ऐरे] के निर्माण की आवश्यकता के लिए प्रकट होते हैं, आउटपुट: [3 ऑब्जेक्ट्स का एरे जिसमें घटनाएं होती हैं])। –

+0

'नोड्स' फ़ील्ड दस्तावेज नहीं है, लेकिन जैसा कि मैंने ऊपर वर्णित किया है, यह काम करता है। इंटरमीडिएट परिणाम ऑब्जेक्ट्स की कोई आवश्यकता नहीं है, यानी आप 'नोड (आईडी: [3 इवेंट की सरणी]] कर सकते हैं' 'और' [3 घटनाओं की सरणी] 'वापस कर सकते हैं - घटना परिणाम केवल उसी क्रम में होना चाहिए तर्क –

संबंधित मुद्दे