React-dnd: рдбрд┐рдмрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ "рдбреНрд░реЙрдк рдХреЗ рдмрд╛рдж рдХреЙрд▓ рд╣реЙрд╡рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ"?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рдЕрдкреНрд░реИрд▓ 2016  ┬╖  24рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: react-dnd/react-dnd

рдирдорд╕реНрддреЗ,
рдореЗрд░рд╛ рдПрдХ рд╕рд╣рдХрд░реНрдореА рдХрд┐рд╕реА рддрд░рд╣ рдореЙрдирд┐рдЯрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рддреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдФрд░ рдпрд╣ рд╕реЛрдЪрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдЙрд╕ рдХреЗ рдЙрдардиреЗ рдкрд░ рднреА рд╡рд╣ рдордБрдбрд░рд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рджреЗ рд░рд╣рд╛ рд╣реИ:

screenshot 2016-04-19 16 34 56

рдбрд┐рдмрдЧрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рдореИрдВ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдФрд░ рд╡рд╣ рдЗрд╕реЗ рд╕рдкреНрддрд╛рд╣ рдореЗрдВ рдПрдХ рдмрд╛рд░ рджреЗрдЦрддрд╛ рд╣реИред
рдореИрдВ рдорд╛рдЙрд╕ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд┐рдП рдЧрдП рдЯрдЪ рдмреИрдХрдПрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╕рд╛рде рд╣реА рдХреБрдЫ рдЯреНрд╡реАрдХреНрд╕ рдХреЗ рд╕рд╛рдеред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЖ рд░рд╣реА рд╣реИ - рдореЗрд░реА рд╕реНрдерд┐рддрд┐ рдРрд╕реА рд╣реИ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдбреНрд░реЙрдк рдЯрд╛рд░рдЧреЗрдЯ рдФрд░ рдбреНрд░реИрдЧ рд╕реЛрд░реНрд╕ рджреЛрдиреЛрдВ рд╣реИред рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ рджреЛ рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЙрдкрд░реЛрдХреНрдд рддреНрд░реБрдЯрд┐ рдХреЛ рдлреЗрдВрдХрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдмрд╛рд░ рдЦреАрдВрдЪ рдХрд░ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВред рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ рддреАрди рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдШрдЯрдХ рдкрд░ рдХрдИ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдирд╛ рд╣реИ?

рд╕рднреА 24 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рддреЛ рдЬреЗрдПрд╕ рдореБрджреНрджреЗ рдХреА рдЬрд╛рдВрдЪ рдХреА рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЙрд▓рдмреИрдХ рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рдереА рдЬрдм рдбреНрд░реЙрдк рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣реЛрддреА рд╣реИ, рдЬреЛ рддрдм рдореЙрдирд┐рдЯрд░ / рд╕реНрдЯреЛрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреА рдереАред

рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЖ рд░рд╣реА рд╣реИ - рдореЗрд░реА рд╕реНрдерд┐рддрд┐ рдРрд╕реА рд╣реИ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдбреНрд░реЙрдк рдЯрд╛рд░рдЧреЗрдЯ рдФрд░ рдбреНрд░реИрдЧ рд╕реЛрд░реНрд╕ рджреЛрдиреЛрдВ рд╣реИред рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ рджреЛ рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЙрдкрд░реЛрдХреНрдд рддреНрд░реБрдЯрд┐ рдХреЛ рдлреЗрдВрдХрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдмрд╛рд░ рдЦреАрдВрдЪ рдХрд░ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВред рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ рддреАрди рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдШрдЯрдХ рдкрд░ рдХрдИ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдирд╛ рд╣реИ?

рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдереА рдФрд░ рдореИрдВрдиреЗ рдХрд▓ рд░рд╛рдд рдЕрдкрдиреЗ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдкрд╛рдпрд╛ред

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдореИрдВ рдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣рд╛ рдерд╛, рдФрд░ рдпрджрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рдбреНрд░рд╛рдкрдЯрд╛рд░реНрдЧ рдкрд░ рдЧрд┐рд░рд╛ рддреЛ рдЙрдиреНрд╣реЗрдВ рдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ рдХреА рд╕реВрдЪреА рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдбреНрд░реЙрдкрдЯрд╛рд░реНрдЧреЗрдЯ рдХреЛ рдПрдХ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ рдХреЗ рдХрдВрдЯреЗрдВрдЯ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдлрдВрдХреНрд╢рдирд▓рд┐рдЯреА рдХрд╛ рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣рд┐рд╕реНрд╕рд╛ (рдпрд╣ рдЖрдЗрдЯрдореНрд╕ рдХреЗ рд▓рд┐рдП 'рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдШрдЯрдХ рд╣реИ) рдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ рд╕реНрд░реЛрдд рдХреА рд╕реВрдЪреА рдореЗрдВ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдереА, рдЬреЛ рд╕рд┐рд░реНрдл рд░рдЦреЗ рдЧрдП рдЖрдЗрдЯрдо рдХреЛ рдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ рд╕реЗ рдмрджрд▓рдХрд░ рд╡рд╛рдкрд╕ рдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред рд╕реВрдЪреАред

image

рдЕрдм, рдпрд╣ рдЕрдкрд╡рд╛рдж рдХреЗрд╡рд▓ рддрдм рд╣реБрдЖ рдЬрдм рдореИрдВ рд╕рднреА рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рдЖрдЗрдЯрдо рд░рдЦреВрдВрдЧрд╛ рдФрд░ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╣рдЯрд╛ рджреВрдВрдЧрд╛ (рдирд╣реАрдВ рдЬрдм рд╕реВрдЪреА рдкреВрд░реА рдирд╣реАрдВ рдереА рдФрд░ рдореИрдВ рдПрдХ рдХреЛ рд╣рдЯрд╛ рджреВрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝ рджреВрдВрдЧрд╛)ред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдирддреАрдЬреЗ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╢реВрдиреНрдп рдмрдЪреНрдЪреЗ рдХрднреА рднреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рд╕рдВрднрд╡рддрдГ рдХрдВрдЯреЗрдирд░ рддрддреНрд╡ рдЧрд╛рдпрдм рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рдирд╣реАрдВ рдерд╛)ред рдЗрд╕реЗ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдкрд░ рдбреНрд░реИрдЧрд╕реЛрд░реНрд╕ рд╕реВрдЪреА рд╕реЗ рдЖрдЗрдЯрдо рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВрдиреЗ рдЙрдирдХреА рд╢реИрд▓реА рдХреЛ display: none

рдпрд╣ рд╕рдордЭрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреАред

рдореИрдВ @PendragonDevelopment рдХреЗ рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░реА рд╕реВрдЪреА рдПрдХ рдЖрдЗрдЯрдо рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рдореЗрдВ рдПрдХ рджреВрд╕рд░рд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдХрднреА рднреА рдкреБрдирдГ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рдореБрджреНрджрд╛ рднреА рд╣реИ
рдореИрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреНрдпреЛрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реА рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ

рдореБрдЭреЗ рдпрд╣рд╛рдБ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред

рдбреЗрдореЛ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЦрджрд╛рди рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЬрдм рдореИрдВ рдШрдЯрдХреЛрдВ рдХреЛ рд▓реВрдк рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдХреБрдВрдЬреА рдФрд░ рдЗрдВрдбреЗрдХреНрд╕ рджреЛрдиреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд░реЗ рдХреА рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдбреЗрдореЛ рдореЗрдВ рд╡реЗ рдХреЗрд╡рд▓ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЙрд░реНрдЯреЗрдмрд▓ / рд╕рд┐рдВрдкрд▓ / рдХрдВрдЯреЗрдирд░.рдЬреЗрдПрд╕ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреБрдВрдЬреА рддрдп рд╣реЛрддреА рд╣реИред

рдпрд╣ рдХрд┐рдпрд╛ рдФрд░ рдХрд╛рдо рдХрд┐рдпрд╛!

рдХреБрдВрдЬреА рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рд╕рд░рдгреА рд╕рдВрджрд░реНрдн рдХреЗ рдмрд╛рдж рдШрдЯрдХ рдХрд╛ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИ

рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдбрд╛рдпрдирд╛рдорд┐рдХ рдШрдЯрдХ рд╣реИ рдФрд░ рдбреАрдПрдирдбреА рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ рд╣реИ рддреЛ рдЖрдкрдХреЛ рдХреБрдЫ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рд╢рд╛рдпрдж Date.now() рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рдХреБрдВрдЬреА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдЧрд╛ред

{this.state.rows.map(function(row, key) {
  return (<RowComponent key={row.id} index={key} id={row.id} moveRow={that.moveRow} />);
})}

row.id рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ

рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди node-uuid's v4 рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреБрдВрдЬреА рдХреЗ рдмрдЬрд╛рдп рдореЗрд░реЗ model.id рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рддрдп рдХрд┐рдпрд╛ред рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдЕрдм рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИрдВред

рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдХреБрдВрдЬреА рдиреЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдирд╣реАрдВ рдХреАред
рдпрд╣ рдореЗрд░рд╛ рдХреЛрдб рдерд╛

           <ContentPatch>
             {tasks.loading 
              ? <div>...loading </div>
              : this.state.containers.map((item, i) => {
                  return (
                    <TaskStage
                      key={item.id}
                      item={item}
                      tasklist={tasks.tasks}
                      onDropped={this.handleDropped}
                      onBeginningDrag={this.onBeginningDrag}
                    />
                  );
                })}
          </ContentPatch>

рд╣рд░ рдЧрд┐рд░рд╛рдИ рдЧрдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдмрд╛рдж, рдореИрдВ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреА рдореИрдкрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рдереАред
рдФрд░ рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рджреА

...
{tasks.loading && tasks.tasks.length===0
 ? <div>...loading </div>
...

рдФрд░ рдпрд╣ рд╣рд▓ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдлрд┐рд░ рд╕реЗ рдмрдврд╝рддреЗ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рд╣реИред

рдореИрдВ рдЙрд╕реА рддреНрд░реБрдЯрд┐ рдХреЛ рд▓реЗрдХрд░ рдЖрдпрд╛ рдерд╛ред

рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдерд╛:

  • рд╕рдорд╛рди DragSource рдФрд░ DragTarget рдШрдЯрдХ
  • рдбреНрд░реЙрдк рд╣реЛрдиреЗ рдкрд░, рдореИрдВ рдПрдХ рдорд╛рд░реНрдЧ рдкрд░ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛

endDrag ( DragSource рдкрджреНрдзрддрд┐) рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж drop ( DropTarget рдкрджреНрдзрддрд┐) рд╣реЛ рдЬрд╛рддреА рд╣реИред рдореИрдВ drop рднреАрддрд░ рдорд╛рд░реНрдЧ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЛ рд╕рдВрднрд╛рд▓ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдореЙрдирд┐рдЯрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рддреЛрдбрд╝ рд░рд╣рд╛ рдерд╛ред

рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП endDrag рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рддрд░реНрдХ рджрд┐рдпрд╛ред рдпрджрд┐ monitor.didDrop() рд╕рд╛рде рдбреНрд░реЙрдк рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЬрд╛рдБрдЪ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдмреБрд░рд╛ рдирд╣реАрдВ рдерд╛ред

рдореЗрд░рд╛ рдпрд╣ рдореБрджреНрджрд╛ рд╣реИ, рднреАред рдореЗрд░рд╛ рдорд╛рдорд▓рд╛ рдРрд╕рд╛ рд╣реИ рдХрд┐ рдШрдЯрдХ рдбреНрд░реЙрдк рдЯрд╛рд░рдЧреЗрдЯ рдФрд░ рдбреНрд░реИрдЧ рд╕реЛрд░реНрд╕ рджреЛрдиреЛрдВ рд╣реИред рдореИрдВрдиреЗ рдПрдВрдбрдбреНрд░реИрдЧ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдкреИрдЪ рдмреИрдХреЗрдВрдб (https://gist.github.com/nickpresta/eb5cce69d650db4c2795) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рдореЗрд░рд╛ рдШрдЯрдХ:

@DropTarget<HeadColOwnProps>(TaskDndTypes.headCol, headColTargetSpec, headColTargetCollector)
@DragSource<HeadColOwnProps>(TaskDndTypes.headCol, headColSourceSpec, headColSourceCollector)
class HeadColComponent extends React.Component<any, void> {
    render() {
        const props = this.props;
        return this.props.dndConnectDropTarget(
            this.props.dndConnectDragPreview(
                <div>
                    <div className={block('panels-task__drag')({start: props.dndIsDragging})}>
                        <SortingIcon
                            label={props.label}
                            arrowIsVisible={props.sortingIsPossible}
                            direction={props.sortingDirection}
                            clickHandler={props.sortingHandler}
                        />
                        {this.props.dndConnectDragSource(
                            <span className="panels-task__drag-control">
                                <SVGIcon width={10} height={10} url={'#icon-drag-and-drop-cell'} />
                            </span>
                        )}
                    </div>
                </div>
            )
        );
    }
}

рдЙрдкрдпреЛрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг:

const renderHeadCellId = (): JSX.Element => {
        return (
            <TaskCellHead key="key-head-col-id" modifications={{ number: true }}>
                <HeadColComponent
                    label="#"
                    key="key-dnd-head-col-id"
                    taskColType={TaskCols.id}
                    sortingIsPossible={false}
                    taskColsOrder={taskStore.orderCols}
                    updateDragProcess={(dp: TaskColDragProcess | null) => taskStore.updateDragProcess(dp)}
                    updateOrderCols={(order: TaskCols[]) => taskStore.updateOrderCols(order)}
                    dragProcess={taskStore.dragProcess}
                />
            </TaskCellHead>
        );
    };

рдбреЗрдХреЛрд░реЗрдЯрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕:

const headColSourceSpec: DragSourceSpec<HeadColOwnProps> = {
    beginDrag(props: HeadColOwnProps): DraggedItem {
        return { sourceColType: props.taskColType };
    },
    canDrag(props: HeadColOwnProps): boolean {
        return props.taskColsOrder.length > 1;
    },
    endDrag(props: HeadColOwnProps, monitor: DragSourceMonitor): void {
        console.debug('endDrag');
        if (!monitor.didDrop()) {
            return;
        }
        console.debug('endDrag finish');
        props.updateOrderCols((monitor.getDropResult() as DroppedResult).newOrderCols);
    }
};

const headColTargetSpec: DropTargetSpec<HeadColOwnProps> = {
    drop(props: HeadColOwnProps, monitor: DropTargetMonitor): DroppedResult {
        console.debug('drop');
        return {
            newOrderCols: getNewOrder((monitor.getItem() as DraggedItem).sourceColType, props.taskColsOrder, props.dragProcess)
        };
    },
    hover(props: HeadColOwnProps, monitor: DropTargetMonitor, component: HeadColComponent): Object | void {
        if (!monitor.canDrop()) {
            return;
        }
        // ...
        props.updateDragProcess(currentDragProcess);
    },
    canDrop(props: HeadColOwnProps, monitor: DropTargetMonitor): boolean {
        return props.taskColType !== (monitor.getItem() as DraggedItem).sourceColType;
    }
};

const headColSourceCollector = (connect: DragSourceConnector, monitor: DragSourceMonitor) => ({
    dndConnectDragSource: connect.dragSource(),
    dndConnectDragPreview: connect.dragPreview(),
    dndIsDragging: monitor.isDragging()
});

const headColTargetCollector = (connect: DropTargetConnector, monitor: DropTargetMonitor) => {
    return {
        dndConnectDropTarget: connect.dropTarget(),
        dndIsOverCurrent: monitor.isOver({ shallow: true })
    };
};

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рдмрд╛рдж endDrag рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди drop рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдХрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

endDrag(props: HeadColOwnProps, monitor: DragSourceMonitor): void {
        console.debug('endDrag');
        if (!monitor.didDrop()) {
            return;
        }
        console.debug('endDrag finish');
        props.updateOrderCols((monitor.getDropResult() as DroppedResult).newOrderCols);
    }

рдореИрдВ рдХреНрдпрд╛ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ? рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рдореИрдВрдиреЗ рдЯрдЪ рдмреИрдХрдПрдВрдб (https://github.com/yahoo/react-dnd-touch-backs) рд╕реЗ рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдмреИрдХрдПрдВрдб рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред рдЗрд╕рд╕реЗ рдореЗрд░рд╛ рдХрд╛рдо рдмрдирддрд╛ рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП, рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕рд┐рд░реНрдл рдбреНрд░реЙрдкрдмреИрдХ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рд╕реЗрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓ рд░рд╣реА рдереАред рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдпрд╣ рд╕рднреА рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рдмрд╛рдж рднреА рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рд░реЛрдХ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬреИрд╕реЗ рд╣реА рдореИрдВрдиреЗ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯреНрд╕ рдХреЛ рд╣рдЯрд╛рдпрд╛, рджреВрд░ рд╣реЛрдиреЗ рдкрд░ рддреНрд░реБрдЯрд┐ред

Im рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-dnd-touch-backend рдХреЗ рд╕рд╛рде рдмрджрд▓рд╛ рдЧрдпрд╛ рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ html5 рдЪрд▓рд╛рдКрдБрдЧрд╛ред рдЙрди рд╕рднреА рддрддреНрд╡реЛрдВ рдкрд░ рд╕реЗрдЯрд┐рдВрдЧ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬреЛ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдореБрджреНрд░рд┐рдд рдХреА рдЬрд╛ рд░рд╣реА рд╣реИрдВред

рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рдереАред рдореИрдВ рд╣рд░ рд░реЗрдВрдбрд░ рдкрд░ рдбреНрд░реИрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдШрдЯрдХреЛрдВ рдкрд░ рдПрдХ рдПрдЪрдУрд╕реА рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣рд╛ рдерд╛ рддрд╛рдХрд┐ рд╡реЗ рд╣рдореЗрд╢рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдереЗ рдЬреЛ рдЙрд▓рдЭрди рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреИрдВрдбред

@ рдард╛рдХреБрдирд┐рди рдиреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ (рдПрдХ рдЕрдиреНрдп рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рднреА рдореБрдЭреЗ рдХреЗрд╡рд▓ рдпрд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА)ред

рдЬрдм рд╕реЗ рдореБрдЭреЗ рдорд┐рд▓рд╛ рд╣реИ рдореИрдВрдиреЗ рд╕рднреА DnD рдХреЛрдб рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдЬрдм рднреА рдореИрдВ рдШрд╕реАрдЯрдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ, рддрдм рднреА рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИред рдЕрдм рдЬрдм рдореИрдВрдиреЗ рд╕рднреА рдХреЛрдб рдХреЛ рдПрдХ рдПрдХрд▓ рдЙрдкрдпреЛрдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛ рджрд┐рдпрд╛, рддреЛ рд╢рд╛рдпрдж рдореИрдВ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХреВрдВред рдЬрдм рдореИрдВ рдХрд░реВрдВрдЧрд╛ рддрдм рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд░реВрдВрдЧрд╛ред (рдореИрдВ рдорд╛рдЙрд╕ рд╕реЗрдЯрд┐рдВрдЧ btw рдореЗрдВ TouchBackend рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ)

рдЬрд╡рд╛рдм рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдШрд╕реАрдЯрддреЗ рд╕рдордп рдХреБрдЫ рдФрд░ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рдкрд░ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ - рдЬрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдпрд╣ рдЕрдкреНрд░рд╛рдкреНрдп рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рд╣реИ?

рд╣рд░ рдмрд╛рд░ рдЬрдм рдореИрдВ рдШрд╕реАрдЯрдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдЦрд╛рди рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИред

рдореЗрд░рд╛ рдорд╛рдорд▓рд╛ рдпрд╣ рдерд╛ рдХрд┐ рдЖрдЗрдЯрдо рдХреЛ рдЧрд┐рд░рд╛рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдПрдВрдбрдЧреНрд░реИрдЧ (рдкреНрд░реЙрдкрд░, рдореЙрдирд┐рдЯрд░, рдХрдВрдкреЛрдиреЗрдВрдЯ) рдореЗрдВ рдШрдЯрдХ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдерд╛ред рдЗрд╕рд▓рд┐рдП рдпрд╣ рдореЗрд░реА рдореВрд▓ рддреНрд░реБрдЯрд┐ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг "рдбреНрд░реЙрдк рдХреЗ рдмрд╛рдж рдХреЙрд▓ рд╣реЙрд╡рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛" рд╕рдВрджреЗрд╢ рдХреЗ рдХрдВрд╕реЛрд▓ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдПред

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ: https://github.com/react-dnd/react-dnd/issues/431#issuecomment -317219509

рдЬрдм рдореИрдВ рдкрд╣рд▓реЗ рдЕрдиреНрдп рдЕрдирдЪреЗрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛, рддреЛ рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓рд╛ред рдХреЛрдИ рдЕрдиреНрдп рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рддрдм рд╣реБрдЖ рдЬрдм рдПрдВрдбрдбреНрд░реИрдЧ рдореЗрдВ рдореИрдВрдиреЗ рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ / рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬреЛ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рддреЛ рдЖрдзрд╛рд░рднреВрдд рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рддреНрд░реБрдЯрд┐ dnd рдЕрдЯрдХ рдЧрдИред рдПрдВрдбрдбреНрд░реИрдЧ рдмреНрд▓реЙрдХ рдореЗрдВ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди / рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдЖрдк рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
endDrag: (props, monitor) => { try { handleEndDrag(); } catch(errror) { console.error(error)} }

рдСрдирдбреНрд░реЙрдк рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдПрдХ рдбрд┐рдмрдЧрд░ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рднреА рдореЗрд░реЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕реНрд░реЛрдд рдерд╛ред рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рд╕реЗ рддреНрд░реБрдЯрд┐ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореИрдВ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рд╣рд╛рд░реНрдб рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдХреЛрдИ рднреА рд╡рд┐рдЪрд╛рд░ рдХреНрдпреЛрдВ рдбреАрдмрдЧрд░ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд░рд╣рд╛ рд╣реИ?

рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рд╣рд┐рдд рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рдРрдк рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВред

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрд╛рд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдереАред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

dwjohnston picture dwjohnston  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bebbi picture bebbi  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mx2323 picture mx2323  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Vadorequest picture Vadorequest  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Okami92 picture Okami92  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ